首页 > 解决方案 > 显示“大括号”符号值的变量的写入输出

问题描述

我更像是一个 Linux bash shell 人,并且在 PowerShell 中遇到了让我困惑的东西。我想在 foreach 循环中从 AD 中提取用户名列表并对它们执行特定操作。

在这一点上,我只关心在基于该字符串运行任何重要操作之前是否拉出正确的字符串。这是我正在运行的测试(为保护隐私,方括号中的详细信息已删除):

Import-Module ActiveDirectory
foreach ($x in (Get-ADUser -Filter * -Server "[host]" -SearchBase '[mybase]' | Select-Object SamAccountName)) {
    Write-Output "Alias is: $x"
}

所以交易是,如果我在Write-Output声明中去掉双引号,它看起来很棒并且会打印:

别名是:
用户名1
别名是:
用户名2
别名是:
用户名3

它在每个值之前注入一个换行符,我宁愿从字符串中删除/剥离。

但在双引号内,我反而得到:

别名是:@{SamAccountName=username1}
别名是:@{SamAccountName=username2)
别名是:@{SamAccountName=username3}

我不确定如何从中提取我正在查看的值。我在这里看什么?这是我需要取消引用的东西,还是我需要提取的数组中的东西?或者我的变量值实际上是一个对象而不是一个字符串,我需要以某种方式ToString()对其进行操作(或等效)?

标签: powershellvariables

解决方案


问题在这里:

Select-Object SamAccountName

它返回一个具有SamAccountName属性的对象。如果您只想要该值,请使用
-ExpandProperty

Select-Object -ExpandProperty SamAccountName

推荐阅读