Powershell,正在检查新表中的$null值
我创建了一个脚本来帮助我们清点机器。它非常成功,最后我创建了一个表,并将该对象导出为CSV 大量计算机有时不返回任何值(RPC服务不可用)。我如何检查是否返回了每个值?如果没有打开任何值,我想将这些机器添加到单独的列表中进行故障排除。什么是最有效的检查方法Powershell,正在检查新表中的$null值,powershell,Powershell,我创建了一个脚本来帮助我们清点机器。它非常成功,最后我创建了一个表,并将该对象导出为CSV 大量计算机有时不返回任何值(RPC服务不可用)。我如何检查是否返回了每个值?如果没有打开任何值,我想将这些机器添加到单独的列表中进行故障排除。什么是最有效的检查方法 $table = @{ Model= $PCInfo.Model IEVersion = $ie.sValue Serial = $Bios.SerialNumber Memory = $ram Department = $dp.Depar
$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
}
我猜您正在使用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"}
(一)
如果未打开任何值
。这可能意味着$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服务不可用
。如果您知道服务是问题所在,则可以检查服务是否正在运行或未使用wmi。您可以将新对象分配给变量,然后检查空属性:
$pso = New-Object PSObject -Property $table
$pso.PSObject.Properties | Where-Object {$_.value -eq $null}
当您不知道哪个属性可以为null时,您会怎么做?