如何使用 Windows 任务计划程序在远程服务器上运行可执行文件?

如何使用 Windows 任务计划程序在远程服务器上运行可执行文件?

我正在考虑将我们域内各个服务器 (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 *-ScheduledTaskcmdlet 已经包含了在远程会话或远程计算机上运行的可能性……

相关内容