Powershell Using Scope Modifier In Invoke-Command For a VM



我试图在调用命令vmname中传递变量$DNSClientServerAddr的值。我的选择是"using"范围修饰符。我似乎无法通过其价值:

[int]$NumberOfVMs = Read-Host "NUMBER OF VMs TO BE CONFIGURED"
$VMName = Read-Host "VM NAME PREFIX                "
[int]$VMNameSuffix = Read-Host "STARTING NUMBER               "
$DNSClientServerAddr = Read-Host "DNS CLIENT SERVER IP ADDRESS  "
For ($Count = 1; $Count -le $NumberOfVMs; $Count++, $VMNameSuffix++) {
$VMNameFull = "$VMName" + "$VMNameSuffix"
Invoke-Command -VMName $VMNameFull -ScriptBlock {
$Using:DNSClientServerAddr
Write-Host $DNSClientServerAddr }
}

当我测试在Write-Host $DNSClientServerAddr中看到时,我得到的总是空白。"使用"工作与调用命令的虚拟机在一个代码像这样简单吗?或者我真的必须使用New-PSSession和-ArgumentList吗?另外,Hyper-V应该被激活/安装在我要配置的虚拟机中吗?

顺便说一下,我使用的是Powershell 5.1版本。

谢谢!

$DNSClientServerAddr未在远程会话中定义。您可以通过$Using直接使用一个局部变量,如下所示:

Invoke-Command -VMName $VMNameFull -ScriptBlock {
Write-Host $Using:DNSClientServerAddr
}

您也可以分配变量,使其成为远程会话的本机,并放弃使用$using作用域修饰符的需要,但您仍然需要进行初始分配。

Invoke-Command -VMName $VMNameFull -ScriptBlock {
$DNSClientServerAddr = $Using:DNSClientServerAddr
Write-Host $DNSClientServerAddr
}

引用

About_remote_variables

About_Using

About_scopes

最新更新