我试图在调用命令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