0

ここに初めてポスターを投稿しました。私は少し初心者で、PowerShell スクリプトのスキルをゼロまで上げたいと思っていましたが、ややこしいものに出くわしました...

コンピューターのコレクションにクエリを実行するスクリプトを作成しました。Win32_OperatingSystem にクエリを実行したいのですが、PSObject にデータを入力できるようにビルド番号のみを推定します。ビルド番号が 7601 の場合に OS 列の下にメッセージを書き込めるように、いくつかの If ロジックを追加しようとしています。

私が抱えている問題は、たとえば BuildNumber の値が 7601 ではなく @{BuildNumber=7601} として出力されることです。それと、私の If ステートメントが壊れています。

$Machines = Get-Content .\Computers.txt

Foreach($Machine in $Machines)
{
    $sweet = (Get-WmiObject -Class Win32_OperatingSystem -computer $Machine | Select-Object BuildNumber)
    $dversion = if ($sweet -eq "@{BuildNumber=7601}") {Yes!} else {"Nooooo!"}

    New-Object PSObject -Property @{
    ComputerName = $Machine
    Sweet = $sweet
    OS = $dversion

}
}
4

2 に答える 2

2

問題は、Get-WMIObject コマンドレットがハッシュ テーブルを返すことです。次に、Select-Object は必要な BuildNumber セクション、BuildNumber プロパティ、およびその値のみを返します。-ExpandProperty パラメーターを追加して、名前と値のペアではなく、値のみを取得する必要があります。

    Get-WMIObject -Class Win32_OperatingSystem | Select-Object BuildNumber

戻り値

    @{BuildNumber=7601}

ExpandProperty を使用

    Get-WMIObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber

戻り値

    7601
于 2013-03-03T02:38:29.480 に答える
1

使用できないマシンをスキップするための ping テストのもう 1 つのオプションです。

Get-Content .\Computers.txt | Where-Object {Test-Connection -ComputerName $_ -Count 1 -Quiet} | Foreach-Object {

    $sweet =  Get-WmiObject -Class Win32_OperatingSystem -ComputerName $_ | Select-Object -ExpandProperty BuildNumber

    New-Object PSObject -Property @{
        ComputerName = $_.__SERVER
        Sweet =  $sweet
        OS = if ($sweet -eq 7601) {'Yes!'} else {'Nooooo!'}    
    }

}
于 2013-03-01T10:58:35.450 に答える