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 对象为空,您可以检查是否$table为空。

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

您可以将新对象分配给变量,然后检查空属性:

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

我猜你正在使用 WMI 等来填充那些 '$PCinfo' 类型变量。由于我自己也经历过同样的练习,我建议您将它们转换为函数并将逻辑构建为脚本的返回函数,例如:

Function Get-PcInfo {

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

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

因此,现在您将拥有一些(或全部)散列“值”作为 $false,并且您可以使用散列属性(如 .values)来检查 $false。

同样,如果您使用 $null,则需要检查结果。一种方法是使用如下逻辑:

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