从PowerShell输出中删除空白区域

时间:2013-11-13 03:09:27

标签: powershell active-directory

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

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

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

*
*
mygroup@mycompany.com
*
*

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

3 个答案:

答案 0 :(得分:6)

我认为这应该有用(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()

答案 1 :(得分: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

BTW关键点在于PowerShell处理对象,当它将这些对象渲染到屏幕时,它有一个格式化引擎,可以确定输出前后的空行。如果您不喜欢PowerShell的默认格式,您可以随意格式化对象(显示您想要的任何属性),但这需要更多工作。

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

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

Select-Object MailFormat-WideOut-String不是必需的。哎呀,使用PowerShell V3,即使命令返回多个对象,它也能正常工作。

答案 2 :(得分:0)

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

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

重新阅读原始问题后,看来我有另一个问题要解决。我正在寻找一种在输出行的 end 处修剪空白的方法。经过检查的答案使我尝试了上面的代码,这些代码确实可以满足我的需求。