[英]Powershell - Invoke-VMScript - How to insert a variable into the script variable?
我正在嘗試使用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行:char:5 +&{= get-netadapter | where-object MacAddress -like 00-50-56-a1-33-61 | select- ... +〜+ CategoryInfo:ObjectNotFound:(=:String)[],CommandNotFoundEx接收+ FullyQualifiedErrorId:CommandNotFoundException
Set-DnsClient:無法處理參數“ InterfaceIndex”上的參數轉換。 無法將值“ .InterfaceIndex”轉換為類型“ System.UInt32 []”。 錯誤:“無法將值“ .InterfaceIndex”轉換為類型“ System.UInt32”。錯誤:“輸入字符串的格式不正確。”“第1行char:134 + ... InterfaceIndex .InterfaceIndex -UseSuffixWhenRegistering False- RegisterThisConn ... + ~~~~~~~~~~~~~~ + + CategoryInfo:InvalidData:(:) [Set-DnsClient],ParameterBindi ngArgumentTransformationException + FullyQualifiedErrorId:ParameterArgumentTransformationError,Set-DnsClie nt
實際上,使用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
}
$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 = get-netadapter | where-object MacAddress -Like $($mac) | select-object InterfaceIndex
$interfaceindex = get-netadapter | where-object MacAddress -Like $($mac) | select-object InterfaceIndex
您的變量中有值 。
嘗試使用類似這樣的東西($interfaceindex.InterfaceIndex[0])
(不要忘了“(”括號后的反引號)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.