Powershell,检查$ table值的新表

时间:2013-09-09 15:27:45

标签: powershell

我创建了一个脚本来帮助我们清点机器。它是成功的,最后我创建了一个表,该对象被导出为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
}

3 个答案:

答案 0 :(得分: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检查服务是否正在运行。

答案 1 :(得分:1)

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

$pso = New-Object PSObject -Property $table
$pso.PSObject.Properties | Where-Object {$_.value -eq $null} 

答案 2 :(得分:0)

我猜你正在使用WMI等填充'$ PCinfo'类型变量。由于我自己经历了同样的练习,我建议你把它们变成函数并将逻辑构建成脚本的返回函数,如:

Function Get-PcInfo {

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

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

所以现在你将有一些(或所有)散列'值'为$ false,你可以使用Hash属性(如.values)来检查$ false。

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

if ($hash.Values | ? {$_ -ne $null}) {"not null"}