PowerShell中Where-Object无法读取部分属性的技术咨询
问题分析与解决办法
针对你遇到的Get-MsolCompanyInformation中DAPEnabled属性无法用Where-Object筛选的问题,主要有以下几个原因及对应解决方式:
1. 属性未被实际赋值(值为$null)
DAPEnabled是云解决方案提供商(CSP)租户的专属属性,若你的租户不属于CSP类型,该属性会处于未填充状态,值为$null。此时无论用-eq $true还是-eq $false都无法匹配,因为$null与任何布尔值都不相等。
验证方式:直接输出属性值确认
(Get-MsolCompanyInformation).DAPEnabled
若输出为空,说明该属性无有效数据,自然筛选不到结果。
2. 属性类型不匹配
部分MSOnline模块返回的属性,Get-Member显示的类型可能和实际运行时类型不一致。比如DAPEnabled可能被定义为布尔型,但实际返回字符串格式的"True"/"False",导致布尔值比较失效。
验证方式:查看属性实际类型
(Get-MsolCompanyInformation).DAPEnabled.GetType()
如果是字符串类型,需改用字符串比较:
Get-MsolCompanyInformation | Where-Object {$_.DAPEnabled -eq "True"}
3. 动态属性的绑定问题
MSOnline cmdlet返回的部分对象属于动态类型,部分属性是后期绑定的,Where-Object直接处理时可能无法正确识别属性。可以先将对象转换为标准PSCustomObject再筛选:
Get-MsolCompanyInformation | Select-Object * | Where-Object {$_.DAPEnabled -eq $true}
内容的提问来源于stack exchange,提问作者Stephen ePrivate
相关产品推荐
相关产品推荐

