4

我在 PowerShell 中使用以下命令返回 Active Directory 中通讯组的邮件属性。

Get-ADGroup $GroupName -Properties Mail | Select-Object Mail | Format-Wide

输出看起来像(用于表示空白的星号):

*
*
mygroup@mycompany.com
*
*

有什么方法可以删除在输出开头和结尾添加的空格?

4

3 回答 3

9

我认为这应该有效(V2):

(Get-ADGroup $GroupName -Properties Mail | Select-Object Mail | Format-Wide | out-string).split("`n") -match '\S'

编辑:这比它需要的要复杂得多。

(Get-ADGroup $GroupName -Properties Mail | Select-Object Mail | Format-Wide | Out-String).trim()
于 2013-11-13T03:15:17.350 回答
0

这就是 PowerShell 格式化输出的方式。我曾多次抱怨输出前后多余的空白行。如果你想避免这种情况,那么你自己格式化输出。你可以这样做:

$res = @(Get-ADGroup $GroupName -Properties Mail | Select-Object Mail)
for ($i = 0; $i -lt $res.Length - 1 + 4; $i += 4) { 
    "{0,-28} {1,-28} {2,-28} {3,-28}" -f $res[$i].Mail,$res[$i+1].Mail,$res[$i+2].Mail,$res[$i+3].Mail
}

这假设您当前的控制台是 120 个字符宽。如果是 80,则将-28上面的更改为-18

顺便说一句,这里的关键点是 PowerShell 处理对象,当它将这些对象呈现到屏幕上时,它有一个格式化引擎,可以确定输出前后的空白行等内容。如果您不喜欢 PowerShell 的默认格式,您可以随意格式化对象(显示您想要的任何属性),但这需要更多的工作。

综上所述,如果命令只返回一个对象,为什么不这样做:

(Get-ADGroup $GroupName -Properties Mail).Mail

和不是必需的Select-Object Mail。哎呀,使用 PowerShell V3,即使命令返回多个对象,它也可以工作。Format-WideOut-String

于 2013-11-13T03:29:58.663 回答
0

检查答案中的示例组合在类似情况下对我有用:

 ... Format-Table | Out-String).split("`n").trim()

重新阅读原始问题后,我似乎有一个不同的问题要解决。我正在寻找一种从输出行末尾修剪空白的方法。检查的答案让我尝试了上面的代码,它做了我想要的。

于 2020-09-07T23:53:19.893 回答