如何将局部变量传递给远程 PowerShell 脚本

How do I pass a local variable to remote PowerShell Script

让我简要介绍一下我尝试过的所有方法。

这里是 Start_TestTalk.ps1 脚本

$RN = $env:RName $TestV = "Local_Variable" Write-Host $TestV Write-Host $RName Write-Host $RN Write-Host $env:RName

我已经声明了以下变量

$Name="myname" $CPU= 100

第一种方法:

PS C:\Users\Administrator> Invoke-Command -Session $s -Scriptblock{ & "C:\Users\Administrator\Desktop\Start_TestTalk.ps1 " -RName $args[0] -RCPU $args[1]}-argumentlist $Name,$CPU Local_Variable

第二种方法

PS C:\Users\Administrator> Invoke-Command -Session $s -Scriptblock{ & "C:\Users\Administrator\Desktop\Start_TestTalk.ps1 " -RName $using:Name -RCPU $using:CPU} Local_Variable

第三种方法

PS C:\Users\Administrator> Invoke-Command -Session $s -Scriptblock{ Param($Name, $CPU) & "C:\Users\Administrator\Desktop \Start_TestTalk.ps1" -RName $Name -RCPU $CPU}-argumentlist $Name ,$CPU Local_Variable

以上三种方法都只打印远程机器本地的 'Local_Variable' 而不会打印我从本地机器传递的变量(这里是 $Name)。

您可以使用 :using 变量前缀:

Invoke-Command -Session $s -Scriptblock{ & "C:\Users\Administrator\Desktop\Test.ps1" -RName $using:Name -RCPU $using:CPU}

在我们公司的一位高级架构师的帮助下,我弄清楚了该功能的工作方式。从本地(源机器)发送的变量实际上并不是远程机器上的本地变量,它们只是作为值转储到远程机器上而不是作为变量(你不能使用变量)。关于我提到的上述脚本如何工作的一个简单示例

Start_TestTalk.ps1 脚本

$RN = $args[0] $CPU= $args[1] Write-Host $RN Write-Host $CPU

现在使用相同的旧 Invoke 命令,稍作更改,删除之前用于保存本地机器值的变量

使用参数列表调用远程脚本

I've declared the below variables $Name="myname" $CPU= 100 PS C:\Users\Administrator\ Invoke-Command -Session $s -Scriptblock{ & "C:\Users\Administrator\Desktop\Start_TestTalk.ps1" $args[0] $args[1] }- argumentlist $Name,$CPU myname 100

现在您看到您在远程机器上获得了所需的输出,这表明值是直接转储的,而不是与变量一起转储的,因此我之前无法在远程机器上使用这些变量。