Exchange 2013 PowerShell创建PowerShell函数

函数是将一些列命令合并到一个可重用的代码块中,然后我们只需要调用这个函数。函数可以被配置为更改或返回一个或多个可以显示在控制台或输出到一个外部文件的对象。你可以将函数的输出传递給一个变量,或其它命令。在这一节中,我们讲学习下如何创建一个PowerShell函数

去创建一个函数,我们需要用到关键字Function,然后紧跟着就是这个函数的名称,然后函数的代码附在大括号{}中。先来看一个示例,这是一个基本的函数,将会在一个列表中显示邮箱的三个属性

function Get-MailboxList {

param($name)

Get-Mailbox $name | fl Name,Alias,ServerName

}

技术分享

PowerShell函数运行原理

PowerShell函数可以让我们使用一个简单的函数名称运行一序列的命令。我们可以将输入的参数添加到函数中,也可以作为管道输入。这使得我们能够编写自己的可重用的功能函数,运行起来就类似于一个命令。

有如下几种方法你可以将功能函数添加到你的Shell会话中。

第一、   你可以把功能函数保存为一个.ps1后缀的文件,然后定位到当前文件下跑函数命令

第二、   你可以把功能函数保存为一个.ps1文件,然后配置PowerShell配置文件

PowerShell函数可以被写为接受和执行流程管道输入,可以使用三个阶段,分别是:BeginProcessEnd块。

Begin:在函数的开始,Begin块只运行一次,任何自定义和初始化可以在这里发生

Process:这一过程块在每个对象管道运行一次,每个对象,通过管道可以访问到$_automatic变量

End: End块在所有Process运行后才处理

下面我们使用Process Block创建一个简单的管道函数。Begin BlockEnd Block是可选的。例如,下面的示例函数将会通过管道返回每个邮箱的名称

function Get-MailboxName {

process {

"Mailbox Name: $($_.Name)"

}

}

我们可以使用Get-Mailbox命令传递信息給函数,每个邮箱的名称将会返回:

技术分享

PowerShell函数高阶体验

下面我们结合一个实际的例子,结合Get-MailboxStatisticsSet-Mailbox到一个函数中,通过这个函数自动化一些任务用于演示PowerShell函数的功能

下面的函数将设置一个邮箱的ProhibitSendReceiveQuota,配置邮箱的name和所需的配额大小。这个函数只会修改当前用户的配额值超过了限制设置邮箱用户。

function Set-SendReceiveQuota {

param(

[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName =

$true)]

$name,

[Parameter(Mandatory=$true)]

$quota

)

begin {

$count = 0

Write-Output "Started: $(Get-Date -format T)"

}

process {

$count += 1

$mailboxstatistics = Get-MailboxStatistics $name

$total = $mailboxstatistics.TotalItemSize.Value.ToMB()

if($total -lt $quota) {

Set-Mailbox $name -ProhibitSendReceiveQuota $quota `

-UseDatabaseQuotaDefaults $false

}

}

end {

Write-Output "Ended: $(Get-Date -format T)"

Write-Output "Mailboxes Processed: $count"

}

}

技术分享

运行函数命令:

技术分享

这个Bebin Block只在开始的时候立即运行一次,而当调用函数命令的时候,开始时间很快被显示出来。在Process Block中,我们使用了$count变量来跟踪处理了多少个对象。而End Block最后才运行,报告总共的处理项目数。在上一个示例中,我们可以看到输出结果很快就显示出来,下面我们演示下处理一个邮箱集合看看:

技术分享

由于我这里有些邮箱从未登陆过,可能看到如上一些警告信息。但是我们可以看到开始时间和结束时间,以及处理的邮箱数目。

本文出自 “Robin's Home” 博客,谢绝转载!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。