2017-12-21 13 views
0

以下のコマンドを使用して、KB値の完全一致をチェックする必要があるという点で、更新リストからKB値を取得しました。-eqのすべての可能性を使用しました。取得するのには完璧ですが、私の場合はうまく動作しないことをお勧めします。powershellのオブジェクトを比較する方法

$patchID="KB3039714" 
$Session = New-Object -ComObject "Microsoft.Update.Session" 

$Searcher = $Session.CreateUpdateSearcher() 
$historyCount = $Searcher.GetTotalHistoryCount() 
$a = $Searcher.QueryHistory(0, $historyCount) | Select-Object 
@{Name="KB";Expression={[regex]::match($_.Title,'\ 
(([^\)]+)\)').Groups[1].Value}} 
foreach($c in $a){ 
if($c -eq $patchID){ 
$Status="True" 
write-host "exe File Type" 
}else{ 
write-host "Given patchID is not available" 
}} 
+1

「私が持っています以下のコマンドで使用する " - どのようなコマンド?また、Get-Memberを使ってオブジェクトが持つプロパティを確認することができます。 – Raziel

+0

$ c.gettype()私はそれがStringオブジェクトを返さないことに気付きましたが、PSCustomObject この状況で比較する方法。 – hasini

答えて

0

あなたが書き出すときには示してい$ C:あなたは、文字列$patchIDで出力を比較したい場合は

enter image description here

をので、あなたがオブジェクトの属性「KB」を比較する必要があなたのひもで。このような 次のいずれかの

$patchID="KB3039714" 
$Session = New-Object -ComObject "Microsoft.Update.Session" 

$Searcher = $Session.CreateUpdateSearcher() 
$historyCount = $Searcher.GetTotalHistoryCount() 
$a = $Searcher.QueryHistory(0, $historyCount) | Select-Object @{Name="KB";Expression={[regex]::match($_.Title,'\(([^\)]+)\)').Groups[1].Value}} 
foreach($c in $a){ 
if($c.KB -eq $patchID){ 
$Status="True" 
write-host "exe File Type" 
}else{ 
write-host "Given patchID is not available" 
}} 

またはこのような

$patchID="KB3039714" 
$Session = New-Object -ComObject "Microsoft.Update.Session" 
$Searcher = $Session.CreateUpdateSearcher() 
$historyCount = $Searcher.GetTotalHistoryCount() 
$a = $Searcher.QueryHistory(0, $historyCount) | Select-Object 
@{Name="KB";Expression={[regex]::match($_.Title,'\(([^\)]+)\)').Groups[1].Value}} 
if($a.KB.Contains($patchID)){ 
$Status="True" 
write-host "exe File Type" 
}else{ 
write-host "Given patchID is not available" 
}} 

もう少しPowerShellは、オブジェクトにたぶん、あなたが読むべきで、この記事は非常によくそれを説明する:https://technet.microsoft.com/en-us/library/ff730946.aspx

関連する問題