У меня есть следующий сценарий PowerShell, который позволяет мне собирать информацию о дисках и томах на серверах Windows домена, в котором запущен сценарий:

$ErrorActionPreference = 'SilentlyContinue'

Get-ADComputer -Filter 'OperatingSystem -like "*Server*"' -Properties * |
    Select-Object Name |
    ForEach-Object {
        if (Test-Connection $_.Name -Count 1) {
            Get-WmiObject -Class Win32_LogicalDisk -ComputerName $_.Name -Filter "DriveType=3" | 
                Select-Object PSComputerName, DeviceID, 
                    @{Name="Size /GB";Expression={[math]::Round($($_.Size / 1GB), 2)}},
                    @{Name="Free /GB";Expression={[math]::Round($($_.Freespace / 1GB), 2)}},
                    @{Name="Free %";Expression={[math]::Round($($_.Freespace/$_.Size)*100, 1)}}
        } else {
            Write-Nost $_.Name " Connection Error"
        }
    } |
    sort PSComputerName |
    Format-Table -AutoSize

Получаю такой результат:

SRV01  Connection Error
SRV02  Connection Error

PSComputerName  DeviceID     Size /GB  Free /GB  Free %
--------------  -------- ------------ --------- -------
SERVER03        C:             125,51    105,59    84,1
SERVER04        C:              24,83      7,38    29,7
SERVER05        E:              14,65      7,36    50,2
SERVER06        C:              49,66     29,28      59

Я хочу добавить дополнительную колонку с ОС для каждого сервера. Я бы хотел, чтобы этот столбец был на второй позиции после столбца «PSComputerName». Как я могу получить такой результат? Я думаю, что использую вложенную команду, добавляя Get-WmiObject Win32_OperatingSystem | Select-Object caption в Get-WmiObject -Class Win32_LogicalDisk ..., но я не знаю, какой синтаксис использовать и как объединить команду в другую команду.

1
user203520 9 Ноя 2017 в 11:19

1 ответ

Лучший ответ

Не используйте -properties * ... он получит каждое заполненное свойство, которое вам не нужно в этом скрипте.

Get-ADComputer имеет свойство operatingsystem.

Не испытано:

Get-ADComputer -Filter 'OperatingSystem -like "*Server*"' -Properties OperatingSystem  | ForEach-Object {
    $OS = $_.OperatingSystem
    If (Test-Connection $_.Name -Count 1 -Quiet){
        Get-WmiObject -Class win32_logicalDisk -ComputerName $_.Name -Filter "DriveType=3" | 
        Select-Object pscomputername, @{Name="OS";Expression={$OS}} ,DeviceID,              
            @{Name="Size /GB";Expression={[math]::Round($($_.size / 1GB), 2)}}, 
            @{Name="Free /GB";Expression={[math]::Round($($_.freespace / 1GB), 2)}},
            @{Name="Free %";Expression={[math]::Round($($_.Freespace/$_.Size)*100, 1)}}
    }
    else {
        Write-host $_.Name " Connection Error"
    }
} | sort pscomputername | Format-Table -AutoSize
0
marc_s 9 Ноя 2017 в 14:58