我正在考虑将我们域内各个服务器 (Win 2008 R2) 上运行的所有计划任务整合到一个“任务调度服务器”上。我是一名开发人员,所以我甚至不确定这是个好主意还是只是维护麻烦。我们的一位网络人员将我监控的一些任务复制到新服务器上,并要求我对其进行测试。
主要问题似乎是让任务尝试运行的应用程序在远程服务器上运行,而不是在任务被安排在其上的服务器上运行。我看到的错误是找不到引用的 dll 之类的东西。当我检查程序集时,dll 存在于远程服务器上,但不存在于调度服务器上。这让我认为,即使我填写了“开始于”字段,它实际上也不是从那个位置开始的。
在这种情况下,我在编辑操作对话框中的设置如下 -
程序/脚本:\\server1\c$\some\long\path\myExe.exe 添加参数(可选):arg1 arg2 开始于(可选):\\server1\c$\some\long\path
另一个例子是批处理文件,即使设置了“起始位置”值,如果脚本中有相对路径,也找不到路径。如果我将路径更改为绝对路径,一切正常。例如,在批处理文件中 -
dir .\update /b /on >> ..\logs\logdir.txt
得到无效路径错误,因为
dir \\server1\c$\my\path\update /b /on >> \\server1\c$\my\logs\logdir.txt
确实有效。
所以我的技术问题是 - 如何让 exe(和批处理文件)在远程服务器上运行?而我的网络管理员问题是 - 这是管理计划任务的好方法吗?还是最好将计划放在与执行处理的服务器相同的服务器上?
答案1
实现此目的的一种方法是使用执行像这样:
psexec /accepteula yourserver.yourdomain CommandToExecuteRemotely
另一种方法是启用PS远程处理在远程服务器上,那么您的计划任务可能采用以下形式
powershell -command "Invoke-Command -ComputerName yourserver.yourdomain
-FilePath ""C:\LocalScriptToExecuteRemotely.ps1"""
或者
powershell -command "Invoke-Command -ComputerName yourserver.yourdomain
-Scriptblock { ScriptblockToExecuteRemotely }"
可以在此处找到更多 Powershell 替代方案远程处理章节,例如Invoke-RemoteExpression
在未启用 PS Remoting 的情况下使用。
请记住在适用的情况下使用 Windows CLI 样式的转义字符(插入符号:^)或 Powershell 样式的转义字符(反引号:`)。
还要注意远程机器上的任何所需权限——两种解决方案都有传递凭据的选项。
至于管理问题:这只取决于您想如何管理任务,但由于您已经需要远程服务器上的可执行文件,我认为最好也在远程服务器上配置计划任务。
如果您打算远程管理您的计划任务例如schtasks
在您的命令/脚本块中使用:]
请注意,Powershell *-ScheduledTask
cmdlet 已经包含了在远程会话或远程计算机上运行的可能性……