Powershell 评估WMI输出

Powershell 评估WMI输出,powershell,Powershell,我正在尝试使用powershell评估一些WMI命令的输出。我看到的所有示例都使用$objWMI.Version之类的方法来获得实际设置,但我似乎无法使其正常工作 例如: $test=“get-wmiobject-namespace root\webadministration-class directorybrowsesection |选择已启用|格式列表” 我想根据返回的是真还是假来做一些事情 我试过这样的方法: 如果($test-eq“False”) 如果($test.Enabled-eq

我正在尝试使用powershell评估一些WMI命令的输出。我看到的所有示例都使用$objWMI.Version之类的方法来获得实际设置,但我似乎无法使其正常工作

例如: $test=“get-wmiobject-namespace root\webadministration-class directorybrowsesection |选择已启用|格式列表”

我想根据返回的是真还是假来做一些事情

我试过这样的方法: 如果($test-eq“False”) 如果($test.Enabled-eq“False”) 如果($测试-匹配“假”)


作为参考,运行WMI命令本身将返回: 已启用:False

运行
Get Member
输出以下内容:

get-wmiobject -namespace root\webadministration -class directorybrowsesection | select Enabled 

TypeName: Selected.System.Management.ManagementObj 

Name MemberType Definition 
---- ---------- ---------- 
Equals Method bool Equals(System.Object ob 
GetHashCode Method int GetHashCode() 
GetType Method type GetType() 
ToString Method string ToString() 
Enabled NoteProperty System.Boolean Enabled=False –

假设您确实要处理一个bool,请尝试以下方法:

if ($myBool -eq $false)
{
  # Do Stuff
}
字符串“False”实际上不是False。事实上,当将其直接转换为bool时,它会返回true,因为.NET中的“true”字符串值定义为非零长度字符串:

PS C:\> [bool]"False"
True
PS C:\> [bool]""
False

下面是一个关于powershell中bools的详细说明和一些扩展说明。

您可以尝试将对象强制转换到一个数组中,并在该数组中对其进行求值:

$test = (get-wmiobject -namespace root\webadministration -class directorybrowsesection | select enabled, property1, property2, etc) foreach ($item in $test) if ($item.enabled -eq $false) { # do stuff } else { # do something different } $test=(获取wmioobject-namespace root\webadministration-class directorybrowsesection |选择enabled、property1、property2等) foreach($test中的项目) 如果($item.enabled-eq$false) { #做事 } 其他的 { #做些不同的事情 }
为什么希望它返回一个布尔值?运行WMI命令本身会返回:Enabled:False我想使用“Enabled:False”并根据它是False还是true执行其他操作。尝试将cmdlet管道化到
| Get Member
,以获取有关正在处理的对象类型和属性的详细信息。此外,您可以使用$true和$false代替“true”和“false”。您可能会惊讶地发现,
[bool]“False”
输出True,因为您没有识别False,而是一个长度非零的字符串值。感谢Get Member,我不知道这一点,它帮助我理解了一些事情。使用$test-eq$false,我仍然有同样的问题。该命令正在查看IIS中的设置,所以我认为它是字符串输出,这就是我以前为什么使用“false”的原因。没问题。我们可能会提供更多帮助,尝试使用Get Member和output将行粘贴到您的帖子中。如果有帮助的话,您可能也不需要
格式列表
,这可能会使事情变得复杂。尝试过这个方法后,$test-eq$false仍然不起作用。该命令正在查看IIS中的设置,因此我认为它是字符串输出,这就是我之前执行“false”的原因。