我正在尝试使用invoke-vmscript通过其macaddress修改我们所有服务器上的IPV4参数。
$vms = import-csv C:\temp\adapter_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 知觉 + FullyQualifiedErrorId:CommandNotFoundException
Set-DnsClient:无法处理参数的参数转换 “接口索引”。无法将值“ .InterfaceIndex”转换为类型 “ System.UInt32 []”。错误:“无法将值“ .InterfaceIndex”转换为类型 “ System.UInt32”。错误:“输入字符串的格式不正确。” 在线:1字符:134 + ... InterfaceIndex .InterfaceIndex -UseSuffixWhenRegistering为False -RegisterThisConn ... + ~~~~~~~~~~~~~~~ + CategoryInfo:无效数据:( :) [Set-DnsClient],ParameterBindi ngArgumentTransformationException + FullyQualifiedErrorId:ParameterArgumentTransformationError,Set-DnsClie nt
答案 0 :(得分:1)
使用wmiobject实际上更好,因为它可以在Windows 2008和2012上运行。
$vms = import-csv C:\temp\adapter_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
}
答案 1 :(得分:0)
您的$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.InterfaceIndex)
EDIT2:
有时很难理解所有这些符号的使用:-)。在set-dnsClient参数的文档中,它表明对于参数InterfaceIndex来说,它“指定接口的索引号。”
使用您的代码$interfaceindex = get-netadapter | where-object MacAddress -Like $($mac) | select-object InterfaceIndex
,您的变量中就有值。.
尝试使用类似($interfaceindex.InterfaceIndex[0])
的方法(不要忘记在“(”之后的反引号肢体)