[英]How to determine a VMs customization specification state with PowerShell (PowerCLI)?
我目前正在研究Powershell腳本,該腳本應執行以下任務:
我需要檢測定制過程的當前狀態。 是否可以通過PowerCLI命令獲得它?
注意:如果在自定義任務中未完成sysprep和重新啟動的情況下繼續執行腳本,則以下任務將失敗...
如果已經嘗試使用power-cli命令wait-tools等待syspep完成。 這里的問題是,在sysprep完成之前vmware工具已經在工作,並且腳本運行出錯,因為sysprep之后vm仍需要最后一次重啟
我什至嘗試處理目標機器的最近VI事件。 尤其是對事件“ CustomizationStartedEvent”,“ CustomizationSucceeded”和“ CustomizationFailed”做出反應時,使用等待工具的情況相同:當sysprep完成並且vm等待最終重啟時,將發出“ CustomizationSucceeded”事件。
這兩個命令都引發錯誤“ VMTools not running”或“ WinRM not running”。
我還嘗試使用$GetVMNew.ExtensionData.Guest.ToolsRunningStatus
獲取vmware工具狀態。 但其結果與Wait-Tools相同
guestcust.log
內容guestcust.log
反應 日志中的最后一個條目具有與“ CustomizationSucceeded” VI事件相同的時間戳。 因此,這將導致重新啟動出現相同的計時問題
域聯接在sysprep完成並且vm self還沒有啟動之前發生
我不確定您是什么意思CustomizationSpec的狀態,無論如何,您都可以使用Get-OSCustomizationSpec
PowerCLI cmdlet來使用Customization Specs:
例如,您可以更改網絡地址,設置虛擬機名稱等。請參見示例以在克隆過程之前更改規范的IP地址:
Get-OSCustomizationSpec ConfSpecName |
Get-OSCustomizationNicMapping |
Set-OSCustomizationNicMapping -IpMode:"UseStaticIP" -IpAddress 10.0.0.10 `
-SubnetMask "255.255.255.0" -DefaultGateway 10.0.0.254 -Dns 10.0.0.100
查看所有PowerCLI CustomizationSpec Cmdlet:
PS C:\> Get-Command *OS*Spec* | Select Name
Name
----
Get-OSCustomizationSpec
New-OSCustomizationSpec
Remove-OSCustomizationSpec
Set-OSCustomizationSpec
也許最簡單的方法是使用Get-VIEvent
查找“自定義成功”事件。 或者,如果您的操作系統自定義過程包括新的來賓主機名,請等待Get-VM
的$_.Guest.Hostname
屬性選擇新名稱。
在一種情況下,我正在通過將關閉命令作為New-OsCustomizationSpec
的-GuiRunOnce
參數的一部分來處理類似的問題。 然后,在克隆過程之后啟動vm之后,我等待vm完成加電( Wait-Tools
在這里可能同樣出色-老實說,我不記得為什么不使用它了。)
"Waiting for vmtools to get IP address..."
do {
Start-Sleep -Sec 3
$cloneObj = Get-View -ViewType VirtualMachine -Property Guest -Filter @{"name" = $vmname}
$IP = $cloneObj.Guest.IPaddress
} until ($IP)
然后,我等待-GuiRunOnce
關閉命令完成並且vm已關閉,此時可以安全地假設sysprep和自定義操作已完成(我想除非操作系統崩潰了)。
"Preparing clone. Sysprep will take a few minutes..."
do {Start-Sleep -Sec 3}
until ((Get-VM $vmName | Select -Expand PowerState) -eq "PoweredOff")
當然,您之后可能需要重新啟動虛擬機。 這可能有點滿足您的需求。 由於其他原因,我暫時需要關閉vm,但是基本建議是使用-GuiRunOnce
作為確認sysprep定制后操作系統已啟動的方法。 您可以將文件寫入某個地方,然后檢查其是否存在,而不是關閉文件。等等Invoke-VMScript
也可能會有所幫助,例如,如果您的克隆無法立即訪問網絡,並且完成您的-GuiRunOnce
操作只能在克隆內部進行驗證。
您可以考慮在OS定制過程中加入域,而不是在之后。 我想專門使用AD計算機帳戶,在嘗試移動它之前,您可以檢查它是否存在於期望的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.