我更多地是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
语句中省略双引号,它看起来很棒,并且可以打印:
Alias is: username1 Alias is: username2 Alias is: username3
尽管如此,它会在每个值之前插入换行符,我宁愿从字符串中删除/剥离。
但是在双引号中,我却得到:
Alias is: @{SamAccountName=username1} Alias is: @{SamAccountName=username2) Alias is: @{SamAccountName=username3}
我不确定如何从中提取要查看的值。我在这里看什么这是我需要取消引用的东西,还是需要提取的数组中的东西?还是我的变量值实际上是对象而不是字符串,我需要以某种方式对它(或等效方法)执行ToString()
操作?
答案 0 :(得分:2)
问题在这里:
Select-Object SamAccountName
它返回具有SamAccountName
属性的对象。如果只需要该值,请使用
-ExpandProperty
:
Select-Object -ExpandProperty SamAccountName