PowerShell提取安全组info属性转HTML时出现@{info=内容}问题求助
解决PowerShell提取AD组info属性时出现@{info=...}的问题
这个问题我太熟了!你看到的@{info=我的信息}其实是PowerShell自定义对象的默认输出格式——因为你用Select-Object info返回的是一个只包含info属性的对象,不是单纯的属性值本身。下面给你两种简单的解决办法:
方法1:用-ExpandProperty提取纯属性值
修改你的循环代码,给Select-Object加上-ExpandProperty参数,它会直接把指定属性的内容取出来,而不是包装成对象:
$user = $env:username $OfficeLocations = @("San Antonio Sales","Oregon Sales","Phoenix Sales") $OfficeAddress = foreach($OfficeLocation in $OfficeLocations) { Get-ADGroup -Identity $OfficeLocation -Properties info | Select-Object -ExpandProperty info }
方法2:直接访问对象的属性
更简洁的写法是跳过Select-Object,直接通过对象的属性访问符.info获取值,性能也会稍好一点:
$user = $env:username $OfficeLocations = @("San Antonio Sales","Oregon Sales","Phoenix Sales") $OfficeAddress = foreach($OfficeLocation in $OfficeLocations) { (Get-ADGroup -Identity $OfficeLocation -Properties info).info }
补充:处理Get-ADPrincipalGroupMembership的场景
你提到后面用Get-ADPrincipalGroupMembership获取用户组的部分,如果也要提取这些组的info属性,注意这个cmdlet返回的组对象默认不包含info,所以需要再调用Get-ADGroup获取属性,同样用上面的方法:
$objGroup = Get-ADPrincipalGroupMembership -Identity $user | ForEach-Object { # 这里用$_.DistinguishedName或者$_.SID比Name更可靠,避免重名组的问题 (Get-ADGroup -Identity $_.DistinguishedName -Properties info).info }
核心逻辑就是:当你需要的是属性的具体内容时,不要用普通的Select-Object,要么用-ExpandProperty展开,要么直接访问对象的属性。这样就不会再出现@{info=...}这种对象格式的输出了。
内容的提问来源于stack exchange,提问作者elmizu
相关产品推荐
相关产品推荐

