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