如何在另一个命令中覆盖一个命令?

时间:2017-11-09 08:19:55

标签: powershell

我有以下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 个答案:

答案 0 :(得分:0)

不要使用-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