Exchange 2013 PowerShell 传输文件及并行管道

自从Exchange 2013管理Shell命令是通过远程PowerShell会话执行,导入和导出文件需要一个新的特定参数。大概有上百个Shell命令需要用到,那么这一小节,我们就看看如何使用这些参数通过远程Shell连接进行传输文件的。

传输文件工作方式:

假如你正在当前活动目录站点中创建一个边缘订阅中心到传输服务器。当你在边缘服务器上生成了xml文件后,你可以通过New-EdgeSubscription命令,具体语法如下:

[byte[]]$data = Get-Content -Path "C:\certificates\ExportedCert.pfx" `

-Encoding Byte `

-ReadCount 0

$password = Get-Credential

Import-ExchangeCertificate –FileData $data –Password $password

在这个示例中,首先文件被读入到变量$data中。而证书的导入是使用命令import-ExchangeCertificate命令,通过分配$data变量作为-FileData参数的值。

有很多的Exchange Management Shell需要用到-FileData参数,例如:

Import-DlpPolicyCollection: 用于导入DLP策略集合到组织

Import-DlpPolicyTemplate: 用于导入DLP策略模板到组织

Import-ExchangeCertificate:用于导入证书

Import-JournalRuleCollection: 用于导入Journal规则

Import-RecipientDataProperty: 用于导入图片或音频到活动目录

Import-TransportRuleCollection: 用于导入传输规则

Import-UMPrompt: 用于导入自定义音频文件到UM中

下面看一个例子,假设我们需要导出活动目录中用户的照片,关联到邮箱,那么命令如下:

Export-RecipientDataProperty -Identity dsmith -Picture | %{

$_.FileData | Add-Content C:\pics\dsmith.jpg -Encoding Byte

}

当我们通过参数-Picture使用Export-RecipientDataProperty命令时,照片通过FileData属性被重新取回。照片被存储在这个属性中并作为一个Bytes array.为了导出这些数据,我们需要使用循环每个存储在FileData属性中的元素,然后通过使用Add-Content命令重构图像到外部文件中。

处理远程PowerShell并行管道

当使用远程PowerShell会话时,你可能会遇到一个问题,那就是并行管道错误。这对于很多管理员来说可能是一种常见的错误,但是你要知道,所有的Exchange Management Shell都是通过远程PowerShell完成。并行管道错误往往是反直觉的,因为相同的命令语法在一个标准的PowerShell能够正常运行。这一节,我么将看看当并行管道错误时,我们如何避免它。

远程PowerShell是不支持在同一时间执行多个管道的。当你想在一个管道中执行多条命令时,你需要把输出结果保存在变量中,然后通过管道传递到其它命令。例如,我们需要把邮箱集合通过管道传递給New-InboxRule命令,使用如下的语法避免并行管道错误:

$mailboxes = Get-Mailbox -Database “Mailbox Database 1014271532”

$mailboxes | %{

New-InboxRule -Name Attach `

-Mailbox $_ `

-HasAttachment $true `

-MarkImportance High

}

在上面的例子中,首先我们使用了变量$mailboxes存储了属于邮箱数据库Mailbox Database 1014271532中的邮箱集合。紧接着通过循环针对每个邮箱对象,通过管道传输$mailboxex到ForEach-Object命令,上面的示例中使用了%别名替代。然后,针对集合中的每个项目,只要信息中包含附件的邮件我们将它标记为重要。

一些Exchange Management Shell命令是特别设计为接受从其它命令的输出。一个很好的例子就是Get-Mailbox和Set-Mailbox。你可以很简单的通过管道将Get-Mailbox命令直接传递給Set-Mailbox命令,而且一些参数被自动绑定。你应该注意到,Get-Mailbox和New-InboxRule没有被特别设计,那么就需要使用ForEach-Object命令,或者foreach循环语句去传递输出信息。

在一个常规的PowerShell会话中,你可以正常的通过管道将一个命令传递到另外一个命令,但是在远程PowerShell会话中,PowerShell是不支持同时执行多个管道的。

我们尝试通过管道将Get-Mailbox直接传递到ForEach-Object,会出现如下的错误:

但是这个在Exchange 2013 SP1后修复了,你看看如下的结果:

在上面的示例中,我们也可以使用如下的语法:

foreach($i in Get-Mailbox –Database ‘Mailbox Database 1014271532’) {

New-InboxRule -Name Attach `

-Mailbox $i `

-HasAttachment $true `

-MarkImportance High

}

时间: 2024-12-06 00:35:32

Exchange 2013 PowerShell 传输文件及并行管道的相关文章

Exchange 2013 PowerShell管理联系人&通讯组&资源邮箱

管理联系人 创建联系人,使用如下语法: New-MailContact -Alias rjones ` -Name "Rob Jones" ` -ExternalEmailAddress [email protected] ` -OrganizationalUnit sales 已启用邮箱的用户可以使用如下语法: New-MailUser -Name 'John Davis' ` -Alias jdavis ` -UserPrincipalName [email protected]

Exchange 2013 PowerShell新建&修改&删除邮箱

在我们日常使用Exchange Management Shell最多的应该就是邮箱的管理了.在这一节中,将主要介绍下在Exchange中使用语法命令在组织中创建.更新和删除邮箱. 先来看一个示例: 1.  我们可以使用Exchange Management Shell创建一个启用了邮箱功能的AD账户.语法如下: $password = ConvertTo-SecureString -AsPlainText abc.123 -Force New-Mailbox -UserPrincipalName

Exchange 2013 PowerShell手动配置远程PowerShell连接

介绍 在Exchange 2007的时候,微软就推出了一套全新的基于Shell的管理工具:PowerShell V1,而且所有的图形化界面也是建立在这种技术之上的. 到了Exchange 2010,PowerShell更紧密的集成在产品中,Exchange 2010使用的是PowerShell V2,很大程度上依赖于其新的远程架构.即使你的服务器在本地或云端,都可以方便的使用这套管理工具. 在Exchange 2013中,使用的是PowerShell V3,有了更多的命令以及核心功能改变.在20

EXCHANGE 2013 TLS传输层安全

默认情况下,SMTP流量是不被加密的,这就导致在公网上进行邮件沟通就像是在广播一样,任何人拦截到该邮件都可以轻而易举的读取其内容.但是现实场景中有许多敏感信息是通过邮件来进行发送的,所以其中一种保护邮件安全的方法就是使用传输层安全协议(Transport Layer Security)来提供SMTP流量在传输中的加密,受TLS保护的SMTP流量可以让拦截/窃听者无法读取到SMTP流量的内容,但是它只提供传输过程中的保护,对于已经到达目标服务器,或者是在发件方本地服务器的邮件则没法提供保护. 有两

Exchange 2013 PowerShell数组和哈希表

示例: 你可以使用一个变量来存放一个数组,通过这个数组对变量分配多个值,在值之间,值需要用分隔号隔开,下面来创建一个示例: $servers = "EX1","EX2","EX3" 创建一个空的哈希表,可以使用如下语法: $hashtable = @{} 创建完哈希表后,我们可以对它进行赋值: $hashtable["server1"] = 1 $hashtable["server2"] = 2 $hash

Exchange 2013 PowerShell导出报告至文本和CSV文件

Exchange Management Shell的一个好处就是,可以給我们提供详细可自定义的报告.通过Exchange Management数以Shell和Windows系统的PowerShell提供的数以百计的Get-*命令,报告功能是相当强大可自定义的.在这一节中,将通过Exchange环境通过命令导出报告到CSV和文本文件中. 怎么做呢? 导出输出结果到一个文本文件,可以使用Out-File命令.生成特定数据库下的邮箱报告到一个文本文件,可以使用如下命令: Get-Mailbox –Da

Exchange 2013 PowerShell关键概念之一

介绍 当你的组织决定升级到Exchange Server 2013,去体验一些新的功能,如集成的电子邮件存档.发现功能以及高可用功能.不管你是否喜欢,你应该意识到PowerShell已经是Exchange服务器管理工具的一部分,而且你需要去学习一些基本脚本知识,从而建立一些脚本管理Exchange Server.这本书就是关于这方面的介绍.在这一章,将介绍一些PowerShell的一些核心概念,这些概念讲方便你学习这本书中提到的一些实例知识.当然,假如你的PowerShell比较熟悉,可以跳过本

Exchange 2013 PowerShell发送SMTP邮件

作为一个Exchange管理员,我们可能需要使用PowerShell脚本自动化的发送电子邮件.下面一起学习下如何使用PowerShell脚本在你的组织中发送SMTP电子邮件信息. 怎么做到这点呢? PowerShell V2以及后续版本都提供了核心命令可以通过SMTP发送电子邮件信息.使用下面的语法可以发送一份电子邮件信息: Send-MailMessage -To [email protected] ` -From [email protected] ` -Subject "Test E-ma

Exchange 2013 PowerShell创建自定义对象

PowerShell是一个基于对象的Shell,在写一行程序,脚本和函数时,給了我们很大的灵活性.当生成详细的报告时,我们需要从代码中自定义我们的数据输出,或者可以通过管道输送到其它的命令.我们还需要能够控制和定制代码的输出,这样我们可以合并来自多个源的数据到一个单独的对象.在这一节中,我们将学习下基本的构建定制的对象 首先我们要做的时创建一个邮箱对象的集合,将用来作为一组新的自定义对象的数据源: $mailboxes = Get-Mailbox 可以添加自定义的属性用于后续整个管道的对象属性,