在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
[转http://www.cnblogs.com/doublog/archive/2013/02/19/2917205.html]前言服务器为win2008+exchange2010,希望利用.net来统计用户邮箱现状。网上已经有很多介绍怎么通过powershell来操作exchenage的文章,但是在真正做一个具体的事情的时候还是会遇到很多不同的问题。 第一步引用操作powershell的dll,System.Management.Automation.dll。 这里会遇到的问题是版本的问题,由于服务器是win2008,自带的powershell是2.0版本,而开发机包括很多网上的帮助都是引用的C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll ,造成在部署到测试环境后无法工作。后来在同事win7的机器上找到2.0的版本引用后解决。 第二步加载管理exchange2010的Snap-ins。 注意这里加载Snap-ins不能把他当成cmdlets命令来执行,虽然不报错,加载语句为 1 RunspaceConfiguration rsConfig = RunspaceConfiguration.Create(); 2 PSSnapInException snapInException = null; 3 PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException); 4 Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig); 5 myRunSpace.Open(); 第三步现在基础都准备完毕了,可以写cmdlet命令了,完整的语句如下: 1 RunspaceConfiguration rsConfig = RunspaceConfiguration.Create(); 2 PSSnapInException snapInException = null; 3 PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException); 4 Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig); 5 myRunSpace.Open(); 6 Pipeline pipeLine = myRunSpace.CreatePipeline(); 7 8 string cmd ="Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select LegacyDN, DisplayName,StorageLimitStatus,@{name=\"TotalItemSize(MB)\";expression={[math]::Round(($_.TotalItemSize.Split(\"(\")[1].Split(\"\")[0].Replace(\",\",\"\")/1MB),2)}},@{name=\"TotalDeletedItemSize(MB)\";expression={[math]::Round(($_.TotalDeletedItemSize.Split(\"(\")[1].Split(\" \")[0].Replace(\",\",\"\")/1MB),2)}},ItemCount,DeletedItemCount | Sort \"TotalItemSize (MB)\" -Descending | Export-CSV \"c:\\All Mailboxes.csv\" -NoTypeInformation -Encoding UNICODE"; 9 10 Command myCommand = new Command(cmd,true); 11 pipeLine.Commands.Add(myCommand); 12 Collection<PSObject> commandResults = pipeLine.Invoke(); 13 14 15 foreach (PSObject obj in commandResults) 16 { 17 18 Console.WriteLine(obj.ToString()); 19 20 } 这里有几个小问题需要说明一下, 1. 在第10行Command myCommand = new Command(cmd,true) 第二个参数的意思是说这是命令脚本,而不是单单的cmdlet命令,我这里传的是脚本 2.在使用Export-CSV导出csv文件的时候会有编码问题,通过-Encoding UNICODE参数转换编码 3.获取结果是通过PSObject的Properties["列名"]来获取的 我这里把结果导出后利用上篇所说的Logparser来进行二次处理,powershell还是有点慢。 附Get-MailboxStatistics 的返回值说明
参考Using Exchange Management Shell Commands With Managed Code http://msdn.microsoft.com/en-us/library/bb332449.aspx
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论