2017-05-08 7 views
1

私は奇妙な問題を抱えています。ここで何か不足している可能性があります。 私はこの機能を持っている:Get-ItemProperty 1件の結果が不正確ですか?

(@(Get-ItemProperty HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion) | where { $_.DisplayName -like "java*" })) 

私は結果を得る:

function CheckJava { 
    $JavaVersion = (@(Get-ItemProperty HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion) | where { $_.DisplayName -like "java*" }).Count 
    if ($JavaVersion -eq "" -or $JavaVersion -le 1) { 
     Write-Host -NoNewLine "Java Detected - 64bit" 
     Write-Host -ForegroundColor Yellow " [ NO ]" 
     $global:JavaInstalled = $false 
    } else { 
     Write-Host -NoNewLine "Java Detected - 64bit" 
     Write-Host -ForegroundColor Green " [ YES ]" 
     $global:JavaInstalled = $true 
    } 
} 

興味深い何が、私はこれを実行した場合ということです。 .Countは、実際には一つだけが.Count戻り、空、結果が返された場合、2つの項目が結果に存在する場合、正常に動作しますが、。私は1を期待するだろうか?

私はここで本当に明らかに何かが足りないのですか?

答えて

1

あなたは、配列の部分式演算子を置き忘れ。この中

(@(Get-ItemProperty ... | Select-Object ...) | where { ... }).Count 

:この変更

@(Get-ItemProperty ... | Select-Object ... | where { ... }).Count 

を、コードは、あなたが期待するものでしょう。

あなたが観察された行動の理由がある:ときだけ、単一の結果Get-ItemProperty | Select-Objectパイプラインに戻り、一つの要素を持つ配列になり@(...)ターン、それ以降の| Where-Objectが再び配列をアンロールので、あなたはまだで終わります1つの要素を持つ配列の代わりに単一のオブジェクト。

あなたはおそらくPowerShellのv2または古いを使用しているので、まだ、しかし、あなたの1の結果を与える必要があります のPowerShell v3で

以降。

+0

私はそれは、単純な何かを知っていました。 :)ありがとうAnsgar!とても有難い! –

関連する問題