如何使用PowerShell在Windows服务器中获取csv格式的磁盘详细信息

时间:2014-09-24 11:05:42

标签: powershell csv powershell-v2.0

大家好我想以下面的格式获取详细信息

Hostname    Drive_0              Drive_1             Drive_2

Name        C: 99.899227142334   d: 99.899227142334  e: 99.899227142334

我可以使用下面的脚本获取此详细信息,但这适用于PowerShell 3.0 如何更改为在PowerShell 2.0上执行

$result = @()
$obj = new-object PSobject
$server = hostname
$obj |Add-Member -MemberType NoteProperty -Name "Hostname" -Value $server -ErrorAction SilentlyContinue
$z = Get-WmiObject -Class win32_Logicaldisk -Filter 'DriveType=3' | Select-Object -Property DeviceID,  @{LABEL='TotalSize';EXPRESSION={$_.Size/1GB}}

$z3 = $z.DeviceID
$z4 = $z.TotalSize
$i = 0
foreach($z3 in $z3){
 $z1 = $z.DeviceID[$i]
 $z2 = $z.TotalSize[$i]
    $zx = "$z1" + ": $z2"

      $obj | Add-Member -MemberType NoteProperty -Name "Drive_$i" -Value $zx -ErrorAction SilentlyContinue

$i++
  }
   $result+=$obj
     $result | Export-Csv  "$env:userprofile\Desktop\Result.csv" -NoTypeInformation

1 个答案:

答案 0 :(得分:0)

您可以将代码更改为以下内容。它有点整洁,可以排除你的循环和限制,因此你不需要管理它们

$result = @()
$obj = new-object PSobject
$server = hostname
$obj |Add-Member -MemberType NoteProperty -Name "Hostname" -Value $server -ErrorAction SilentlyContinue
$z = Get-WmiObject -Class win32_Logicaldisk -Filter 'DriveType=3' | Select-Object -Property DeviceID,  @{LABEL='TotalSize';EXPRESSION={$_.Size/1GB}}

$i = 0
$z | % {
  $z1 = $_.DeviceID
  $z2 = $_.TotalSize
  $zx = "$z1" + ": $z2"
  $obj | Add-Member -MemberType NoteProperty -Name "Drive_$i" -Value $zx 
  $i++
}
$result+=$obj
$result | Export-Csv  "$env:userprofile\Desktop\Result.csv" -NoTypeInformation

我还删除了-ErrorAction Add-Member,因为您应该尝试处理自己出现的任何内容,但如果您认为有必要,请将其添加回来。