Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 仅向用户输出真实结果_Powershell_Powershell 2.0 - Fatal编程技术网

Powershell 仅向用户输出真实结果

Powershell 仅向用户输出真实结果,powershell,powershell-2.0,Powershell,Powershell 2.0,Christian在下面帮助了我,我也对它做了一些修改,以检查钥匙的价值。无论如何,我现在的问题仍然是基于我提供给用户的输出。我不想显示键名,而是要显示键的值 键的值基于已发现为真的键(在下面的代码中) 因此,如果下面的结果针对键1(键的值为1)、键2(键的值为2)和键3(键的值为3)有一个TRUE,那么如何仅基于找到的特定键向用户放置写主机 ie我希望所提供的结果在特定情况下所有参数均为真时具有以下其中一项的输出 Write-Host "The value of the keys are $k

Christian在下面帮助了我,我也对它做了一些修改,以检查钥匙的价值。无论如何,我现在的问题仍然是基于我提供给用户的输出。我不想显示键名,而是要显示键的值

键的值基于已发现为真的键(在下面的代码中)

因此,如果下面的结果针对键1(键的值为1)、键2(键的值为2)和键3(键的值为3)有一个TRUE,那么如何仅基于找到的特定键向用户放置写主机

ie我希望所提供的结果在特定情况下所有参数均为真时具有以下其中一项的输出

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
尝试以下方法(未测试):


为什么要重复Get-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 

谢谢你-我没有得到任何反馈-我得到的只是:“键的值是”-不太确定为什么,因为它似乎与以前类似。另外,我注意到我正在$keyname(1-4)下定义变量-但是,如果密钥不存在,我会在powershell中收到一个错误,说它找不到密钥的路径。如何在添加变量时抑制错误?我可以在顶部添加$ErrorActionPreference=“silentlycontinue”以停止错误。但是,我仍然没有从输出中得到任何东西。为什么我要复制它…因为我不如你:-)非常感谢-你的代码工作正常,我得到了预期的结果。有一个问题,@()的作用是什么?只需确保$keyVals是一个数组-首先是空的。PowerShell非常容易使用,不需要声明。但是,如果返回的第一个值是字符串,则$keyVals是字符串,随后使用
+=
将值连接到字符串。
$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