我正在尝试运行此代码,但作为脚本运行时不起作用。
当我在powershell中手动运行这些命令时,它会起作用。
无效的脚本:
Invoke-Command -ScriptBlock { Enter-PSSession $Computer; Start-Process cmd -Argument "/c C:\Transfer\SETUP2007.EXE /uninstall ProPlus /config UninstallConfig.xml" } -ComputerName $Computer -AsJob
}
手动输入时有效:
Enter-PSSession pcX
Start-Process cmd -Argument "/c C:\Transfer\SETUP2007.EXE /uninstall ProPlus /config UninstallConfig.xml"
我可以确认$computer
返回正确的名称。
答案 0 :(得分:1)
如果在两台计算机上使用相同的用户,则在使用-computername运行时,无需启用PS会话。这应该起作用:
Invoke-Command -ScriptBlock { Start-Process cmd -Argument "/c C:\Transfer\SETUP2007.EXE /uninstall ProPlus /config UninstallConfig.xml" } -ComputerName $Computer -AsJob
}
来自get-help invoke-command -full
:
要运行一系列共享数据的相关命令,请使用 New-PSSession cmdlet创建PSSession(持久连接) 在远程计算机上,然后使用Session参数 Invoke-Command在PSSession中运行命令。运行命令 在断开连接的会话中,请使用InDisconnectedSession参数。至 在后台作业中运行命令,请使用AsJob参数。
示例:
PS C:\>$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
PS C:\> Invoke-Command -Session $s -ScriptBlock {Get-Culture}
答案 1 :(得分:1)
设法解决了
解决方案是在-Wait
之后添加Start-Process
Invoke-Command -ScriptBlock { Start-Process -Wait cmd -Argument "/c C:\Transfer\SETUP2007 /uninstall ProPlus /config UninstallConfig.xml" } -ComputerName $Computer -AsJob