Powershell - Invoke-VMScript - 如何将变量插入脚本变量?



我正在尝试使用invoke-vmscript使用其mac地址修改我们所有服务器上的IPV4参数。

$vms = import-csv C:tempadapter_vm.csv -Delimiter ";"
foreach($vm in $vms){ 
$serveur = $vm.name
$mac = $vm.macaddress
$dns = "$interfaceindex = get-netadapter | where-object MacAddress -Like $($mac) | select-object InterfaceIndex; set-dnsclient -InterfaceIndex $interfaceindex.InterfaceIndex -UseSuffixWhenRegistering $true -RegisterThisConnectionsAddress $true -ConnectionSpecificSuffix test"
Invoke-VMScript -VM $serveur -ScriptType Powershell -ScriptText $dns -GuestUser secret -GuestPassword secret
}    

我的问题是远程计算机无法识别$interfaceindex。

set-dnsclient需要interfaceindex,这就是我使用$interfaceindex的原因。

你能帮我吗?

也许还有另一种方法?

谢谢!

----------------------------------------------------------------------------------------

=:术语"="不被识别为 cmdlet、函数、脚本的名称 文件或可操作程序。检查名称的拼写,或者路径是否为 包含,请验证路径是否正确,然后重试。 行:1 字符:5 + & { = get-netadapter | where-object MacAddress -like 00-50-56-a1-33-61 | 选择-。。。 + ~ + CategoryInfo : ObjectNotFound: (=:String( [], CommandNotFoundEx 接受 + FullQualifiedErrorId : CommandNotFoundException

Set-Dns客户端:无法处理参数上的参数转换 "接口索引"。无法转换值"。接口索引"键入 "System.UInt32[]"。错误:"无法转换值"。接口索引"键入 "系统.UInt32"。错误:"输入字符串格式不正确。 行:1 字符:134 + ...接口索引 .接口索引 -使用后缀注册时 false -注册此连接... + ~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Set-DnsClient], ParameterBindi ngArgumentTransformationException + FullQualifiedErrorId : ParameterArgumentTransformationError,Set-DnsClie 新台币

使用 wmiobject 实际上更好,因为它适用于 Windows 2008 和 2012。

$vms = import-csv C:tempadapter_vm.csv -Delimiter ";"
foreach($vm in $vms){ 
$serveur = $vm.name
$mac = $vm.macaddress
$dns = "(get-wmiobject -class Win32_NetworkAdapterConfiguration | where-object {`$_.MacAddress -Like ""$($mac)""}).SetDynamicDNSRegistration(`$TRUE, `$TRUE)"
Invoke-VMScript -VM $serveur -ScriptType Powershell -ScriptText $dns -hostcredential $domaincred
}

你的$dns字符串(至少(有两个问题。

首先:尝试@Boxdog所说的内容,并在初始$符号前面添加反引号。
第二:你必须在-InterfaceIndex $($interfaceindex.InterfaceIndex)周围使用偏执。

您的完整字符串应如下所示:

$dns = "`$interfaceindex = get-netadapter | where-object MacAddress -Like $($mac) | select-object InterfaceIndex; set-dnsclient -InterfaceIndex $($interfaceindex.InterfaceIndex) -UseSuffixWhenRegistering $true -RegisterThisConnectionsAddress $true -ConnectionSpecificSuffix test"

试一试。

编辑:也许您还需要在第二个$interfaceIndex之前添加反引号。('$interfaceindex。接口索引(

编辑2: 有时很难理解所有这些标志的使用:-(。在 set-dnsClient 参数的文档中,它显示对于参数 InterfaceIndex,它"指定接口的索引号"。
使用您的代码$interfaceindex = get-netadapter | where-object MacAddress -Like $($mac) | select-object InterfaceIndex您的变量中有
尝试使用类似($interfaceindex.InterfaceIndex[0])的东西(不要忘记"("偏执狂(后面的反引号(

最新更新