在我写了一些基于Office365的报表软件的公司报道后,收到了许多用户反馈。其中大部分人会反问,你为什么不用PowerShell来创建简单的报表,而且免费。这个问题问得好,即使我能做,我也不会沿着这条路走下去,除非你想花费大量的精力。
就在一月份我讨论了Office 365的报表话题后,许多朋友联系我,并且追问为什么我们需要花钱去买那些昂贵的软件包来生成Office 365的数据报表。
其实同样的问题在本地部署的Exchange环境中也存在,这也是一些Office365报告产品之所以存在的原因了,毕竟报表向来不是微软的强项。当然Office 365已经内置了一些报表,但是并不惊艳。
你随时在闲暇时可以体验一下Office365报表工产品。也可以直接进入我们下面的问题,为什么不使用PowerShell来作为产生报表的工具。尽管这些年来已经有很多使用PowerShell生成邮箱或者其它格式化对象报表的例子可以从互联网上下载。我特意收藏了两个,包括Steve Goodman的Exchange环境报表和 Paul Cunningham的健康报表。这两个都是值得推荐的。
PowerShell无疑具备生成好看有价值的报表的能力,但是主要的问题时现有的PowerShell缺少经过优化的报表工具。
比如Office 365中有一个“激活的和未激活的收件箱”报表可以显示有多少用户从来就没有登录过自己的收件箱。这个信息对Office 365管理员很重要,因为用户没有使用,但是你还得每一个月帮他们为这些收件箱支付月供。
一些PowerShell专家会说这些信息我可以非常方便地通过运行下面那样的PowerShell命令来识别最近30天没有登录过的邮箱。这些邮箱通常没有显示最后访问时间,因为它们从没有被访问过。
PS C:> Get-Mailbox –RecipientType 'UserMailbox' | Get-MailboxStatistics | Sort-Object LastLogonTime | Where {$_.LastLogonTime –lt ([System.DateTime]::Now).AddDays(-30) } | Format-Table DisplayName, LastLogonTime DisplayName LastLogonTime ----------- ------------- Ed Banti Andy Ruth David Keane (Inactive - under in-place hold) 22/10/2014 16:05:45 Thomas Best 29/11/2014 13:30:09 Imran Khan 28/12/2014 17:10:07 Steve Smith
这些数据已经很有价值,但是在PowerShell中还会面临一些问题:
- 比如邮箱用户成百上千以后,可能运行起来有点慢。
- 查询数据信手拈来,但是进行格式化打印可能有点力不存心。当然PowerShell可以将数据导出成csv文件,然后你在Excel中大显身手,进行后续处理。但是前提是你的Excel报表功底也不赖。(反正我不太行)
- 没有提供分析某一个时间段的数据的能力,能供使用的cmdlet没有控制我们所需数据的粒度级别。
其实上面提到的例子基本上可以算是比较经典的用PowerShell做的非常优秀的报表示例子了。但是它们是纯手工做的,可能需要花费好几个小时去产生输出。尽管它们免费,没有人能保证你永远能从互联网上下载到适用于你自己的报表脚本。即使你找到一个,你仍然需要验证它到底在你自己的环境中能否正常工作,还有通常从互联网上下载的脚本你在运行前,有没有仔细阅读它们的安全警告?
最后,你如果真的想创建自己的PowerShell报表,你还得维护它,当微软引入新的PowerShell命令,新功能,或者向Office365新的PowerShell命令。当然有的人喜欢挑战自己编写和维护自己的报表,还有一些人喜欢非常方便地高效地使用一些报表工具。
荔非苔注:通篇读下去,感觉是给报表工具写的软文。
原文作者:Tony Redmond
原文链接:Why PowerShell is often not the best tool for reporting Exchange data
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
mark