Информация о логическом диске - PullRequest
0 голосов
/ 14 июня 2011

У меня есть скрипт, который имеет объявление $ output = @ ()

&, в который добавляется набор свойств, здесь есть выход для того же, я добавляю их, используя $ output | Add-Member -MemberType Noteproperty -Name "hostname" -Value "$ hostname", также как и для других свойств. я делаю $ output + = $ output, чтобы добавить добавленные значения,

имя хоста: SEAPS01 дата: 14.06.2011 02:06:36 Установленные приложения: клиентские инструменты Microsoft SQL Server 2008

но теперь проблема в том, что когда я добавляю к этому информацию о жестком диске, он перезаписывается и я получаю сообщение об ошибке, так как свойство заметки уже существует, не могли бы вы помочь мне с тем, как перейти и добавить свойства жесткого диска в $ output object

$ colItems = get-wmiobject -class "Win32_LogicalDisk" -pacespace "root \ CIMV2" -computername $ compname

$drivecount=(get-wmiobject -class "Win32_LogicalDisk" -namespace "root\CIMV2" | Select-Object drivetype | Measure-Object).count




foreach ($objItem in $colItems){
for($j=0;$j-lt$drivecount;$j++){
if ($objItem.DriveType -eq 3){
    # Write to screen
    #write-host "Drive Type: " $objItem.DriveType
    $drivename=$objItem.Name



    # Improve the display of the higher order values of MB and GB 
    $displayMB = [math]::round($objItem.Size/1024/1024, 2)
    $displayGB = [math]::round($objItem.Size/1024/1024/1024, 2)

    $strOutPut57 = $displayGB

    # Improve the display of the higher order values of MB and GB 
    $displayMB = [math]::round($objItem.FreeSpace/1024/1024, 2)
    $displayGB = [math]::round($objItem.FreeSpace/1024/1024/1024, 2)

    $strOutPut58 = $objItem.Name +"\ "+ $displayGB
    $strOutPut59 = $objItem.FileSystem

$output | Add-Member -MemberType Noteproperty -Name DriveName[$j] -Value "$drivename"
$output | Add-Member -MemberType Noteproperty -Name FilesystemType[$j] -Value "$strOutPut59"
$output | Add-Member -MemberType Noteproperty -Name Size[$j] -Value "$strOutPut57"
$output | Add-Member -MemberType Noteproperty -Name FreeSpace[$j] -Value "$strOutPut58"
}




}
}

Ответы [ 3 ]

2 голосов
/ 14 июня 2011

Добавить-член в этом случае не требуется, вы можете манипулировать выводом с помощью Select-Object и пользовательских свойств

Get-WmiObject Win32_LogicalDisk -Filter 'drivetype=3' | Select-Object Name,FileSystem,VolumeName,@{Name='FreeSpace(GB)';Expression={$_.FreeSpace/1GB}},@{Name='Size(GB)';Expression={$_.Size/1GB}}

Ваш пример кода также может быть упрощен до этого (нет необходимости переназначать $ outputи результат потоковый, объекты выходят из конвейера после его создания)

Get-WmiObject Win32_LogicalDisk -Filter 'drivetype=3' | Foreach-Object{
    New-Object PSObject -Property @{
         Name         = $_.caption
         FileSystem   = $_.filesystem
         FreeSpace    = $_.freespace/1GB
         Size         = $_.size/1GB
         VolumeName   = $_.volumename
    }
}
0 голосов
/ 01 октября 2013

Get-WmiObject Win32_LogicalDisk -ComputerName s856ab3 -Filter 'drivetype = 3' |Select-Object Name, FileSystem, VolumeName, @ {Name = 'FreeSpace (GB)'; Выражение = {$ .FreeSpace / 1GB}}, @ {Name = 'Размер (GB)'; Выражение = {$ .Size / 1GB}}

Ого ... это самый хороший способ, которым я видел это.Все остальные способы, которые я видел, были излишне сложными.Спасибо!

0 голосов
/ 14 июня 2011

Вы не видите ошибок в вашем коде?

Проверьте это:

$outputs = @()
$csvs = get-wmiobject -class "Win32_LogicalDisk" -namespace "root\CIMV2" -Filter 'drivetype=3'
foreach ( $csv in $csvs ) {
 $output1 = New-Object PSObject -Property @{
     Name         = $csv.caption
     FileSystem   = $csv.filesystem
     FreeSpace    = ($csv.freespace)/1GB
     Size         = ($csv.size)/1GB
     VolumeName   = $csv.volumename

  }
  $outputs+=$output1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...