我正在尝试使用计算机上的Powercli修改虚拟机的IP。
我想使用Invoke-VMScript,但我找不到将$ vms.ip和vms.gateway(其中一个标题)的结果导入参数“-scripttext”的方法。
VM无法找到该变量,因为它不知道它。
$vm= import-csv C:\temp\create_vm.csv -Delimiter ';'
foreach($vms in $vm){
Invoke-VMScript -VM $vms.machine -ScriptType Powershell -ScriptText 'New-NetIPAddress -InterfaceAlias "Ethernet" -ipaddress $vms.ip -PrefixLength 24 -DefaultGateway $vms.gateway' -GuestUser test -GuestPassword test
谢谢你的帮助!
答案 0 :(得分:0)
单引号意味着PowerShell不会扩展变量 - 它将使用文字字符串$ vms.gateway。
$vms = @{
gateway = "test"
}
$vms.gateway # prints test
"$vms.gateway" # prints System.Collections.Hashtable.gateway
"$($vms.gateway)" # prints test
'$vms.gateway' # prints $vms.gateway
'$($vms.gateway)' # prints $($vms.gateway)
您需要使用subexpressions来访问$vms
变量的属性,并转义Ethernet
周围的双引号,或者对该部分使用单引号:
$script = "New-NetIPAddress -InterfaceAlias 'Ethernet' -ipaddress $($vms.ip) -PrefixLength 24 -DefaultGateway $($vms.gateway)"
-ScriptText $script
更新为根据Example 3
分配变量