我正在使用New-PSSession通过Invoke-Command在远程计算机上运行命令。举一个例子,假设我运行命令FROM的机器被称为FROM-MACHINE,并且运行命令TO的机器被称为TO-MACHINE。Powershell PSSession变量上下文
$session = New-PSSession -ComputerName TO-MACHINE
$script = ScriptBlock::Create("Write-Host Machine name is $env:COMPUTERNAME")
Invoke-Command -session $session -scriptBlock $script
我希望它可以输出:
Machine name is TO-MACHINE
但是,它实际上输出
Machine name is FROM-MACHINE
这也发生在文件路径的情况下 - 如果我想运行一个程序在“C:\ myprogram.exe”中,powershell将尝试在“\\ FROM MACHINE \ c $ \ myprogram.exe”中找到myprogram.exe。
我的问题是:有什么办法(除了使用psexec)真正运行远程命令,变量和所有?我在这里错过简单的东西吗?
如何远程运行脚本?即使我正在运行的脚本位于不同的框中,它仍会在FROM-MACHINE的上下文中报告变量。 – finkonkanonk
你测试了我发布的第二个脚本吗?它应该先返回本地机器名称,然后返回远程机器名称。 – mjolinor
该脚本是否位于本地机器或远程机器上?如果它在本地机器上,我会使用Invoke-Command -FilePath。如果它位于远程机器上,则单引号字符串,或直接传递脚本块。 – mjolinor