2013-01-14 28 views
0

Christian基於以下方式幫助我,並且我已對其進行了一些更改以檢查密鑰的值。無論如何,我現在遇到的問題仍然是基於我提供給用戶的輸出。我不想顯示密鑰名稱,而是顯示密鑰的值。僅向用戶輸出TRUE結果

密鑰的值基於哪些密鑰被發現爲TRUE(在下面的代碼中)。因此,如果以下結果對於關鍵字1(關鍵字的值爲1),關鍵字的值爲2和關鍵字的值爲3,如果結果爲TRUE,那麼如何將WRITE-HOST給用戶的基礎上只找到特定的鍵?

即我希望提供的結果具有以下之一的輸出,當它是特定情況下的所有參數都爲TRUE時。

Write-Host "The value of the keys are $keyvalue1" 

Write-Host "The value of the keys are $keyvalue1 and $keyvalue2" 

Write-Host "The value of the keys are $keyvalue1 and $keyvalue2 and $keyvalue3" 

Write-Host "The value of the keys are $keyvalue1 and $keyvalue2 and $keyvalue3 and $keyvalue4" 

下面是代碼:

$keyvalue1 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 1).'1' 
$keyvalue2 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 2).'2' 
$keyvalue3 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 3).'3' 
$keyvalue4 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 4).'4' 

$testpath1 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 1).'1' -ne $null 2>$null 
$testpath2 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 2).'2' -ne $null 2>$null 
$testpath3 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 3).'3' -ne $null 2>$null 
$testpath4 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 4).'4' -ne $null 2>$null 

$a = $testpath1, $testpath2 , $testpath3 , $testpath4 # convert your true/false results in an array 
$s = "" # empty string 
$i = 1 # a simple variable as index 
foreach ($b in $a) 
{ 
    if ($b -ne $true) 
    { 
    break 
    } 

    $s += "$i " # if true add index in string 
    $i++ 
} 

"$($s)is/are true" #output the result 

回答

2

你爲什麼要複製獲取-ItemProperty電話?您已經擁有存儲在$ keyvalue中的值(或缺少值)。你應該能夠簡化成這樣的事情:

$keyVals = @() 
$keyVals += (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 1).1 
$keyVals += (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 2).2 
$keyVals += (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 3).3 
$keyVals += (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 4).4 

Write-Host "The value of keys are " -NoNewLine 
$first = $true 
foreach ($keyVal in $keyVals) { 
    if ($keyVal -ne $null) { 
     if (!$first) { 
      Write-Host " and " -NoNewLine 
     } 
     $first = $false 
     Write-Host $keyVal -NoNewLine 
    } 
} 
Write-Host 
+0

爲什麼我複製它......因爲我不如你:-)非常感謝 - 你的代碼工作,我得到預期的結果。一個問題 - @()是做什麼的? – lara400

+0

只需確保$ keyVals是一個數組 - 開始時爲空。 PowerShell非常簡單,不需要聲明。但是,如果返回的第一個值是一個字符串,那麼$ keyVals是一個字符串,後續使用'+ ='只是將這些值連接到字符串。 –

0

試試這個(未測試):

$keyvalue1 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 1).'1' 
$keyvalue2 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 2).'2' 
$keyvalue3 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 3).'3' 
$keyvalue4 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 4).'4' 
$testpath1 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 1).'1' -ne $null 2>$null 
$testpath2 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 2).'2' -ne $null 2>$null 
$testpath3 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 3).'3' -ne $null 2>$null 
$testpath4 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 4).'4' -ne $null 2>$null 

$a = $testpath1, $testpath2 , $testpath3 , $testpath4 # convert your true/false results in an array 

$v = $keyvalue1,$keyvalue2,$keyvalue2,$keyvalue4 
$s = "The value of the keys are " # empty string 
$i = 1 # a simple variable as index 
foreach ($b in $a) 
{ 
    if ($b -ne $true) 
    { 
    break 
    } 

    $s += "$($v[$i]) " # if true add value of $v[index] in string 
    $i++ 
} 

"$s" #output the result 
+0

'$ a'定義在哪裏? :) –

+0

感謝那 - 我沒有得到任何輸出 - 我得到的是:「鍵的價值是」 - 不太確定爲什麼,因爲它看起來像以前一樣。另外,我注意到我在$ keyname(1-4)下面定義了變量 - 但是,如果一個鍵不存在,我會在PowerShell中發現一個錯誤,說它找不到該鍵的路徑。如何在添加變量時抑制錯誤? – lara400

+0

我可以在頂部添加$ ErrorActionPreference =「silentlycontinue」來停止錯誤。但是,我仍然沒有從輸出中得到任何回報。 – lara400