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

时间:2016-11-10 10:28:52

标签: powershell powershell-v3.0 powershell-v4.0

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

这是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)。

2 个答案:

答案 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

现在您看到您在远程计算机上获得了所需的输出,因此它传达了这些值直接被转储而不是变量,因此我之前无法在远程计算机上使用这些变量。