You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell 5.1:遍历AD计算机对象时如何引用Select选择的属性列

解决PowerShell中AD计算机对象属性访问的问题

首先直接给你简化后的代码,完全不需要用Select-ExpandProperty:

$OU=@('OU=...') 
$computers = $OU | foreach {
    Get-ADComputer -filter { Name -notlike 'xxx*' -and Name -notlike 'yyy*' } -searchbase $_ -Properties description | 
    Select-Object name, description 
} 

foreach ($computer in $computers) { 
    # 直接用点表示法访问属性
    Write-Host "Host: $($computer.name) [$($computer.description)]" 
}

为什么你之前用点表示法没生效?

你提到尝试$computer.name但被当文本处理,大概率是字符串插值的问题:
当你在双引号字符串里直接写"Host: $computer.name"时,PowerShell会把$computer解析为变量,然后把.name当成普通文本拼接,结果就会输出类似Host: @{name=ABCDE12345; ...}.name的内容,让你误以为点表示法没用。

解决这个问题的关键是用**子表达式$()**把属性访问包裹起来,告诉PowerShell先执行$computer.name的属性获取操作,再把结果插入到字符串中。

额外的简化小技巧

如果你不需要单独保存$computerName和$computerDescription这两个变量,直接在Write-Host里用子表达式引用属性就足够了,像上面的代码那样,能让你的脚本更简洁。

另外你看到的@{name=ABCDE12345; description=Kiosk PC [Domain Separated]}只是PowerShell对这个自定义对象的默认字符串展示形式,并不是变量的实际结构——这个对象确实包含name和description两个可直接访问的属性,点表示法本身是完全有效的。

内容的提问来源于stack exchange,提问作者Brien Malone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:52:27