让我简要介绍一下我尝试的所有方法。
这是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)。
答案 0 :(得分:1)
您可以使用:using
变量前缀:
Invoke-Command -Session $s -Scriptblock{ & "C:\Users\Administrator\Desktop\Test.ps1" -RName $using:Name -RCPU $using:CPU}
答案 1 :(得分:0)
在我们公司的高级建筑师的帮助下,我想出了这个功能的工作方式。从本地(源计算机)发送的变量实际上并不在远程计算机上本地化,这些变量只是作为值转储到远程计算机而不是作为变量(不能使用变量)。关于上面提到的脚本如何工作的一个简单例子
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
现在您看到您在远程计算机上获得了所需的输出,因此它传达了这些值直接被转储而不是变量,因此我之前无法在远程计算机上使用这些变量。