使用Powershell在服务器上获取虚拟SCSI硬件

时间:2013-10-18 15:17:32

标签: powershell scripting vmware powercli scsi

我正在尝试使用Powershell从多个虚拟服务器获取SCSI硬件并获取每个特定服务器的操作系统。我已经设法获得了我想用我的代码找到的特定SCSI硬件,但是我无法弄清楚如何正确获取每个服务器的操作系统。此外,我正在尝试将我找到的所有数据发送到csv日志文件中,但是我不确定如何使PowerShell脚本创建多个列。

这是我的代码(几乎可以,但有些不对劲):

$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 个答案:

答案 0 :(得分: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