如何将局部变量传递给远程 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
现在您看到您在远程机器上获得了所需的输出,这表明值是直接转储的,而不是与变量一起转储的,因此我之前无法在远程机器上使用这些变量。
让我简要介绍一下我尝试过的所有方法。
这里是 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
现在您看到您在远程机器上获得了所需的输出,这表明值是直接转储的,而不是与变量一起转储的,因此我之前无法在远程机器上使用这些变量。