在远程命令中使用局部变量的问题

时间:2015-03-03 16:51:03

标签: powershell filesystems

我需要编写一个接收变量并在远程系统上进行共享的脚本。

这有效:

Invoke-Command -ComputerName server -ScriptBlock {$a = [WMICLASS]"Win32_Share"; $a.Create("C:\test","test",0)}

但这不是:

$sharepath = "C:\test"
$sharename = "test"
Invoke-Command -ComputerName server -ScriptBlock {$a = [WMICLASS]"Win32_Share"; $a.Create($sharepath,$sharename,0)}

我需要一种以某种方式传递这些值的方法。

1 个答案:

答案 0 :(得分:2)

远程会话无法读取您的本地变量,因此您需要使用您的命令发送它们。这里有几个选择。在PowerShell 2.0中,您可以:

1.与-ArgumentList一起使用并使用$arg[i]

$sharepath = "C:\test"
$sharename = "test"
Invoke-Command -ComputerName server -ScriptBlock {$a = [WMICLASS]"Win32_Share"; $a.Create($args[0],$args[1],0)} -ArgumentList $sharepath, $sharename

2.将它们与-ArgumentList一起使用,并在您的scriptblock中使用param()来定义参数

$sharepath = "C:\test"
$sharename = "test"
Invoke-Command -ComputerName server -ScriptBlock { param($sharepath, $sharename) $a = [WMICLASS]"Win32_Share"; $a.Create($sharepath,$sharename,0)} -ArgumentList $sharepath, $sharename

在PowerShell 3.0中,引入了using - 变量范围以使其更容易:

$sharepath = "C:\test"
$sharename = "test"
Invoke-Command -ComputerName server -ScriptBlock { $a = [WMICLASS]"Win32_Share"; $a.Create($using:sharepath,$using:sharename,0)}

您可以在about_Remote_Variables @ TechNet

上详细了解此信息