簡體   English   中英

Powershell-Invoke-VMScript-如何將變量插入腳本變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM