管道的基本概念就是从一条命令的输入到另一个命令。当然他们之间的传递不是纯文本的,所有,有了管道,我们可以通过PowerShell完成非常复杂的任务。

          我们可以是使用一条命令,根据一个OU或者一个数据库下的所有邮箱用户,设定办地点,例如下面这条命,我会把邮箱用户位于数据库”Mailbox Darabase 1014271532”下的所有用户的办公地点更改为总部

wKioL1TCSt-RdVFMAADaU2wwIYA473.jpg

在管道中,我们可以通过管道符号(|)使用一系列的命令,在上一个实例中,我们使用Get-Mailbox返回一个邮箱的对象集合。每个邮箱包含多个AD属性,例如:name,数据库,位置等。而Set-Mailbox命令可以接受来自Get-Mailbox管道的输入,所以我们可以通过一条简单的PowerShell命令修改真个数据库中的用户邮箱的相关信息,在这里,我们可以看到PowerShell带来的高效。

                   当然也可以对输出结果进行过滤,例如可以使用Where-Object命令。下面继续一个例子,我们可以过滤出最大发送限制为10mb的邮箱账户

Get-Mailbox | Where-Object{$_.MaxSendSize –eq 10mb}

                   更多命令参考:

                   Get-User |

Where-Object{$_.title -eq "Exchange Admin"} | Foreach-Object{

Add-RoleGroupMember -Identity "Organization Management" `

-Member $_.name

}

在这条管道命令当中,开始使用一条简单的过滤条件来返回所有title“Exchange Admin”的账户。通过管道将输出传给ForEach-Object对每个对象进行处理,把这些用户加入到“Organization Management”角色组中。

在管道中也可以使用别名,使用别名我们减少输入量。看看下面使用别名的管道命令:

wKiom1TCSgfwFxLbAACgHEzIBMI747.jpg

Get-User |

?{$_.title -eq "Exchange Admin"} | %{

Add-RoleGroupMember -Identity "Organization Management" `

-Member $_.name

}

其实,Where-ObjectForEach-Object还有其它的别名,看看下面的命令:

Get-User |

where{$_.title -eq "Exchange Admin"} | foreach{

Add-RoleGroupMember -Identity "Organization Management" `

-Member $_.name

}