Invoke-Command的语法正确吗?

时间:2019-10-01 07:35:08

标签: powershell

我正在尝试运行此代码,但作为脚本运行时不起作用。

当我在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返回正确的名称。

2 个答案:

答案 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