【问题标题】:Write-Output from variable showing "at curly brace" notation value [duplicate]显示“大括号”符号值的变量的写入输出[重复]
【发布时间】:2019-06-23 06:22:15
【问题描述】:

我更像是一个 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() 操作(或等效操作)?

【问题讨论】:

  • Select-Object SamAccountName -> Select-Object -Expand SamAccountName
  • 啊,确实它是一个对象(正如我应该从命令 Select-Object 中推断的那样),并且 expand 将字符串从中拉出。它总是很简单。谢谢!
  • 我实际上并不认为这是重复的,因为它特定于 Select-Object 并且链接到备用问题并没有提到 Expand 参数,这可能会使其他发生在这个问题。我可以看到输出符号如何重叠,但没有别的。我的意思是,我得到了答案并且对此感到满意,但是您可能想考虑一下究竟什么是重复的,以及在发布我自己的之前,我如何使用本网站上的搜索功能找到其他线程(我做了)。如果有人在 Google 上键入“大括号”,我的可能会被编入索引。
  • 该问题中描述的问题与您的完全相同,并且答案,尤其是来自 mklement0 的答案,描述了该问题的解决方案。
  • 是的。 PowerShell 中的参数名称可以缩短,只要它们保持唯一即可。 -ExpandProperty-ExpandPr-Expand 甚至-Exp 相同。但是,-Ex-E 将不起作用,b/c 还有另一个名为 -ExcludeProperty 的参数。

标签: powershell variables


【解决方案1】:

问题就在这里:

Select-Object SamAccountName

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

Select-Object -ExpandProperty SamAccountName

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2020-09-28
    • 2013-10-26
    相关资源
    最近更新 更多