我正在使用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