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

如何将局部变量传递给远程PowerShell脚本,powershell,powershell-3.0,powershell-4.0,Powershell,Powershell 3.0,Powershell 4.0,让我简单介绍一下我尝试过的所有方法 下面是Start_TestTalk.ps1脚本 $RN=$env:RName $TestV=“局部变量” 写入主机$TestV 编写主机$RName 写入主机$RN 写入主机$env:RName 我已经声明了以下变量 $Name=“myname” $CPU=100 第一种方法: PS C:\Users\Administrator>Invoke命令-Session$s-Scriptblock{&“C:\Users\Administrator\Desktop\St

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

下面是Start_TestTalk.ps1脚本

$RN=$env:RName
$TestV=“局部变量”
写入主机$TestV
编写主机$RName
写入主机$RN
写入主机$env:RName

我已经声明了以下变量

$Name=“myname”
$CPU=100

第一种方法:

PS C:\Users\Administrator>Invoke命令-Session$s-Scriptblock{&“C:\Users\Administrator\Desktop\Start\u TestTalk.ps1
“-RName$args[0]-RCPU$args[1]}-argumentlist$Name,$CPU”
局部变量

第二种方法

PS C:\Users\Administrator>Invoke命令-Session$s-Scriptblock{&“C:\Users\Administrator\Desktop\Start\u TestTalk.ps1
“-RName$using:Name-RCPU$using:CPU}
局部变量

第三种方法

PS C:\Users\Administrator>Invoke命令-Session$s-Scriptblock{Param($Name$CPU)和“C:\Users\Administrator\Desktop”
\Start_TestTalk.ps1“-RName$Name-RCPU$CPU}-argumentlist$Name,$CPU
局部变量


以上三种方法只打印远程计算机本地的“Local_Variable”,而不打印我从本地计算机传递的变量(这里是$Name)

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

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

在我们公司的一位高级架构师的帮助下,我找到了这个功能的工作方式。从本地(源计算机)发送的变量实际上在远程计算机上不是本地的,它们只是作为值转储到远程计算机上,而不是作为变量(不能使用变量)。一个简单的例子,上面提到的脚本是如何工作的

启动TestTalk.ps1脚本


$RN=$args[0]
$CPU=$args[1]
写入主机$RN
写入主机$CPU

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

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

我已经声明了以下变量
$Name=“myname”
$CPU=100
PS C:\Users\Administrator\Invoke命令-Session$s-Scriptblock{&
“C:\Users\Administrator\Desktop\Start\u TestTalk.ps1”$args[0]$args[1]}-
参数列表$Name,$CPU
我的名字
100


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

Test.ps1
的内容是什么?@MathiasR.Jessen:谢谢,对于测试目的,现在还没有什么,我只是想打印从源计算机传递的变量。下面是简单的代码$RN=$env:RName$TestV=“Local_Variable”Write Host$TestV Write Host$RName Write Host$RN Write Host$env:RNameThe start_testtalk.ps1不使用参数…@MartinBrandl:抱歉,我不明白您所说的“start\u testtalk.ps1不使用参数”是什么意思。您正在将参数传递给start-testtalk.ps1,但脚本缺少参数部分e。g
param($Name,$CPU)
谢谢,即使使用变量前缀PS>Invoke命令-Session$s-Scriptblock{&“C:\Users\Administrator\Desktop\Test.ps1”-RName$using:Name-RCPU$using:CPU}也一样,无法验证参数“Name”的参数。参数为null或为空。请提供一个不为null或空的参数,然后重试该命令。+CategoryInfo:InvalidData:(:)[Get Process],ParameterBindingValidationException+FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetProcessCommands然后您可能使用PowerShell 2.0?试试这个:
Invoke命令-Session$s-Scriptblock{Param($Name,$CPU)&“C:\Users\Administrator\Desktop\Test.ps1”-RName$Name-RCPU$CPU}-argumentlist$Name,$CPU
我在本地和远程机器上都使用了Powershell版本4,我也尝试了您建议的方法,但仍然是一样的。我还用更具体的细节更新了问题,以避免混淆。谢谢