0

マシンのインベントリを作成するためのスクリプトを作成しました。それは成功し、最終的にテーブルを作成し、そのオブジェクトは CSV にエクスポートされます。

少数のマシンが値を返さない場合があります (RPC サービスを利用できません)。すべての値が返されたかどうかを確認するにはどうすればよいですか? 値が変更されていない場合は、トラブルシューティングのためにそれらのマシンを別のリストに追加したいと考えています。確認する最も効率的な方法は何ですか?

$table = @{
Model= $PCInfo.Model
IEVersion = $ie.sValue 
Serial = $Bios.SerialNumber
Memory = $ram
Department = $dp.Department
DriveFreeSpaceGB = $freespace
Manufacturer = $PCInfo.Manufacturer
OSName = $WinInfo.Caption
Computer = $computer
Uptime = $formattime
LastloggedinUser = $Uname.name
LastLoggedinDate = $loggedintime
LoggedOnDuringScan = $PCInfo.Username
ServicePack = $WinInfo.ServicePackMajorVersion
Online = $Online
    } 
New-Object PSObject -Property $table | Export-Csv C:\logs\ADInventory\ADInventory.csv -NoTypeInformation -Append
}
4

3 に答える 3

1

1) If no values are turned. これは、$table オブジェクトが null であることを意味し、それ$tableが null かどうかを確認できます。

if($table -eq $null){
#do something here
Write-host "your object is null"
}
else{
#export the objects to csv file
}

2) RPC Service Unavailable. サービスが問題であることがわかっている場合は、サービスが実行されているか、wmi を使用していないかを確認できます。

于 2013-09-09T15:44:00.403 に答える
1

新しいオブジェクトを変数に割り当ててから、null プロパティをチェックできます。

$pso = New-Object PSObject -Property $table
$pso.PSObject.Properties | Where-Object {$_.value -eq $null} 
于 2013-09-09T15:50:50.690 に答える
0

「$PCinfo」タイプの変数を入力するために WMI などを使用していると思います。私自身も同じ種類の演習を行ったので、それらを関数に変換し、次のようなスクリプトの戻り関数にロジックを構築することをお勧めします。

Function Get-PcInfo {

  if ($SystemInfo = Get-WMIObject Win32_ComputerSystem) {
    return $SystemInfo.Model 
  }

  return $false  ##or use $null if you like
}

これで、一部 (またはすべて) のハッシュ「値」が $false になり、ハッシュ プロパティ (.values など) を使用して $false をチェックできます。

同様に、$null を使用する場合は、結果を確認する必要があります。1 つの方法は、次のようなロジックを使用することです。

if ($hash.Values | ? {$_ -ne $null}) {"not null"} 
于 2013-09-09T15:40:26.727 に答える