2013-10-18 33 views
1

我試圖使用Powershell從多個虛擬服務器獲取SCSI硬件並獲取每個特定服務器的操作系統。我設法使用我的代碼獲得特定的SCSI硬件,但是我無法弄清楚如何正確獲取每個服務器的操作系統。另外,我試圖將所有找到的數據發送到csv日誌文件中,但我不確定如何使PowerShell腳本創建多個列。使用PowerShell獲取服務器上的虛擬SCSI硬件

這裏是我的代碼(幾乎工作,但什麼是錯的):

$log = "C:\Users\me\Documents\Scripts\ScsiLog.csv" 
Get-VM | Foreach-Object { 
    $vm = $_ 
     Get-ScsiController -VM $vm | Where-Object { $_.Type -eq "VirtualBusLogic" } | Foreach-Object { 
      get-VMGuest -VM $vm } | Foreach-Object{ 
     Write-output $vm.Guest.VmName >> $log 
      } 
    } 

當我每當我運行它,我只得到了服務器的名稱來運行然而,這代碼,我沒有收到任何錯誤而不是操作系統。另外我不確定我需要做什麼才能讓操作系統出現在我創建的csv日誌中服務器名稱的不同列中。

我需要在我的代碼中更改以獲取每個虛擬機的操作系統版本並將其輸出到我的csv日誌文件的不同列中?

回答

1

get-vmguest返回一個VMGuest對象。這裏記錄:http://www.vmware.com/support/developer/PowerCLI/PowerCLI51/html/VMGuest.html。文檔是稀疏的,但我猜想OSFullName字段會給你的操作系統版本。因此,您可以將寫入輸出行更改爲

add-content $log "$($vm.guest.vmname) , $($vmguest.guest.OSFullName)" 

並且您將處於正確的軌道上。輸出中的逗號是輸出「逗號分隔值」的原因。一個CSV文件可以有一個標題。 (有關詳細信息,請參閱Import-CSV/Export-CSV幫助)。因此,您可能需要添加以下內容作爲腳本的第二行:

add-content $log "VM Name, OS Name" # add CSV header line