我在下面编写脚本来验证Windows服务器中是否存在某些KB。 每个Windows版本都应该安装推荐的KB。这段代码工作正常。但我想在$ Objects中添加一个新的noteproperty作为“Comments”,它的Value应该根据某些条件自定义消息,如“Problem”或“Good”。
条件:
实际情况
代码
$Hotfixes = Get-WmiObject -Class Win32_QuickFixEngineering
$OSName = Get-WmiObject win32_operatingsystem | select Caption -expa Caption
$Kbs = $null
if($OSName -match "2008 R2")
{
$Kbs = @('KB2754704','KB2821052','KB2869606')
}
if($OSName -match "2008 SP2")
{
$Kbs = @('KB2878031')
}
if($OSName -match "2012 R2")
{
$kbs = @('KB3046101','KB3121261')
}
if($OSName -match "2012")
{
$kbs = @('KB3046101')
}
$ht = [ordered]@{}
foreach($kb in $Kbs)
{
$st = $Hotfixes.HotFixID -contains $kb
$ht[$kb] = $st
}
$object = new-object psobject
$object | add-member -MemberType noteproperty -name Server -Value $env:COMPUTERNAME
$object | add-member -MemberType noteproperty -name OSName -Value $OSName
$object | add-member -MemberType noteproperty -name Comments -Value ""
$object
我应该在这里做些什么改变才能通过这三个条件?与$ Kbs数组中的Kb计数无关。 我创建了一个$ Kbs的哈希表,所有$ true都与其他哈希表
进行比较$ht
Name Value
---- -----
KB2754704 False
KB2821052 False
KB2869606 True
$DHash = [ordered]@{}
$Kbs | ForEach-Object {$DHash.Add($_,$true)}
$DHash
Name Value
---- -----
KB2754704 True
KB2821052 True
KB2869606 True
我很震惊继续写条件。我使用了compare-object,但结果是侧面指标。我真的不确定如何实现这个功能。所以在这里发布我的查询以获得一些想法/帮助。
答案 0 :(得分:0)
您可以将$ht
设为PSCustomObject
的类型,然后选择最后一个元素(即“最高”KB)。如果那是$true
,那你很好。如果没有,则表示您遇到问题,因为没有,或者没有安装最新的补丁
$ht = foreach ($kb in $Kbs)
{
$st = $Hotfixes.HotFixID -contains $kb
[PSCustomObject]@{
kb = $kb
st = $st
}
}
$ht = $ht | Sort-Object -Property kb
if ($ht[-1] -eq $true) {
$Comment = 'Good'
}
else {
$Comment = 'Problem'
}