我在 PowerShell 中使用以下命令返回 Active Directory 中通讯组的邮件属性。
Get-ADGroup $GroupName -Properties Mail | Select-Object Mail | Format-Wide
输出看起来像(用于表示空白的星号):
*
*
mygroup@mycompany.com
*
*
有什么方法可以删除在输出开头和结尾添加的空格?
我在 PowerShell 中使用以下命令返回 Active Directory 中通讯组的邮件属性。
Get-ADGroup $GroupName -Properties Mail | Select-Object Mail | Format-Wide
输出看起来像(用于表示空白的星号):
*
*
mygroup@mycompany.com
*
*
有什么方法可以删除在输出开头和结尾添加的空格?
我认为这应该有效(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()
这就是 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-Wide
Out-String
检查答案中的示例组合在类似情况下对我有用:
... Format-Table | Out-String).split("`n").trim()
重新阅读原始问题后,我似乎有一个不同的问题要解决。我正在寻找一种从输出行末尾修剪空白的方法。检查的答案让我尝试了上面的代码,它做了我想要的。