Invoke-VMScript - 变量到参数“-scripttext”

时间:2018-02-15 10:14:19

标签: powershell

我正在尝试使用计算机上的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

谢谢你的帮助!

1 个答案:

答案 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

分配变量