从我的脚本中,我想在远程 Windows 框中运行一些命令。所以我用谷歌搜索了一下,似乎最流行和标准的方法是使用 PowerShell 的Invoke-Command
cmdlet,它似乎使用与winrm
and相同的协议winrs
。所以,下面是我试图从我的脚本中调用的命令(实际上我也尝试了很多其他的修改,但 IMO 这些足以说明问题):
PowerShell -Command "$encpass=ConvertTo-SecureString -AsPlainText mypass -Force;$cred = New-Object System.Management.Automation.PSCredential -ArgumentList myuser,$encpass; Invoke-Command -ComputerName REMOTE_COMPUTER_NAME -Credential $cred -ScriptBlock {<fullcommand>};"
PowerShell -Command "$encpass=ConvertTo-SecureString -AsPlainText mypass -Force;$cred = New-Object System.Management.Automation.PSCredential -ArgumentList myuser,$encpass; Invoke-Command -ComputerName REMOTE_COMPUTER_NAME -Credential $cred -ScriptBlock {Start-Process -FilePath <fullexepath> -ArgumentList <arguments> -Wait -NoNewWindow};"
PowerShell -Command "$encpass=ConvertTo-SecureString -AsPlainText mypass -Force;$cred = New-Object System.Management.Automation.PSCredential -ArgumentList myuser,$encpass;$session=new-PSSession -ComputerName "REMOTE_COMPUTER_NAME" -Credential $cred; Invoke-Command -Session $session -ScriptBlock {<fullcommand>};"
注意:脚本是用 编写的perl
,但 IMO 在这里脚本的语言并不重要,所以你可以假设我从batch
脚本调用命令,请注意,由于命令应该从脚本运行,它们不需要任何交互行动。
所以,我对这些命令有几个问题,需要帮助来解决它们。他们来了:
- 无法运行 类型的进程
configure and run daemon
。也就是说,如果我想configure_server.pl
在远程框 (<fullcommand> = "configure_server.pl <arguments>"
) 上运行,它应该做一些事情,然后运行server.exe
,它不起作用,因为一旦configure_server.pl
完成,整个远程工作就会被杀死,包括server.exe
应该作为守护进程运行的工作。(适用于第 1、2、3 点) - 获取包装(每行的长度小于或等于 80 个字符)标准输出和标准错误。(适用于第 1,3 点)
- 不要得到标准输出和标准错误。(适用于第 2 点)