在开始写这篇博客之前先和大家道个歉,由于之前工作一直比较忙也没什么好的题材来供我写,所以没动笔。微软颁发的MVP奖杯和奖品一直在我父母家我到现在还没去拿,算了这也不是很重要,上海又一直下着雷暴雨,周末想出去放个狗钓个鱼总不能如愿,就算天气好又嫌太热。总之,我有暑假综合症,一到暑假就懒的动,最好一直在家里吹着空调玩玩大菠萝3。今年我还计划给自己放个暑假不知道能不能成功。
言归正传,关于这个脚本其实是我的一个德国同事提议的,他抱怨有些用户申请了相当大的邮箱但是根本没放什么东西,浪费存储资源,询问我技术上能否实现脚本查询会报告。我想了想脚本的大概轮廓回复到技术上没问题,不过德国的法律是禁止查询用户的个人信息的。要他先确认是否允许使用这样的脚本。晚上开会的时候德国人说确认下来说允许使用,不过有限制。OK,第二天我就着手开始写了。。
首先是构思和设计,究竟你的脚本是想体现哪种功能给用户,允许用户自定义哪些参数?输出的结果又是哪些?这些必须在开始写之前考虑好。关于这个脚本,我的想法是要一个窗体,给用户几个基本的查询条件,考虑到每个SITE的情况不一样,所以要把用户以SITE区分开。简单的画了下,大概就是这个样子。。。丑是丑了点,自己心里明白就可以。
核心的代码,额。。。我没学过编程,不知道这个说法正不正确,反正就是这个脚本最核心的那个命令。其他300行代码都是修饰,只有这行才是最重要的。在这个脚本中,这串代码就是
用实际使用掉的邮箱大小 除以 邮箱的配额 以得到这个用户的实际邮箱的使用率
查询实际使用的邮箱大小:
命令: Get-MailboxStatistics -id $user
因为我需要它直接显示出那个数值,所以稍作改变,加上变量就是:
$size = (Get-MailboxStatistics -id $user).totalitemsize.value
再给个参数将这个数值变成Bytes,方便计算
$psize = $size.ToBytes()
查询配额的命令是
$quotaa = (get-mailbox -id $user).ProhibitSendReceiveQuota
在这边要做个解释,由于我们公司的配额有些复杂,部分用户使用的是自定义配额,部分用户使用的虽然是unlimited,但是会受到一个参数UseDatabaseQuotaDefauls的限制。也就是说所有在数据库下的邮箱配额都将使用数据库的配额,有些拗口,不过你看下面这个就能明白了。
有些朋友可能还没发觉数据库也能制定配额,在这边要注意一下。
我稍微看了下所有的数据库设定的配额都不大,所有我就都选择性忽略了。直接来判断
$quotaa = (get-mailbox -id $user).ProhibitSendReceiveQuota
中$quotaa这个变量的Isunlimited参数。
代码如下:
if ($quotaa.Isunlimited -eq $false)
{$pquota = $quotaa.value.ToBytes() #将得到的Quota数值变成Bytes,方便计算
$pusage = ("{0:P2}" -f ($psize/$pquota))("{0:P2}" -f ()) 的作用是将这两个数值相除后得到的数字再经过取小数点后2位, 外加变成百分比%
小实验:大家可以在自己的POWERSHELL中尝试输入
("{0:P2}" -f (0.8973623818172782))
得到的应该是89.74%
再用一个IF判断语句来判定这个得到的百分比数值(也就是使用率),如果小于50%,就会被我的脚本记录下来呈现在之后的报告中。
加上一些变量,基本脚本的架构已经出来了。。
==============================
$servers = get-mailboxserver | where {$_.name -like "*sha*"}
$filedate = (get-date).tostring("yyyyMMdd_hhmmss")
foreach ($server in $servers)
{
write-host "Checking Primary mailbox on $server Mailbox Server..." �Cforegroundcolor green
$users = get-mailbox -server $server -ResultSize 50foreach ($user in $users)
{
$size = (Get-MailboxStatistics -id $user).totalitemsize.value
$psize = $size.ToBytes()
$quotaa = (get-mailbox -id $user).ProhibitSendReceiveQuotaif ($quotaa.Isunlimited -eq $false)
{$pquota = $quotaa.value.ToBytes()
$pusage = ("{0:P2}" -f ($psize/$pquota))
if ($pquota -gt 200MB -and $pusage -lt "50%")
{
$nMsg = $nMsg +
"
UserName: $user
Quota: $quotaa
Size: $size
Usage Rate: $pusage
ServerName: $server
"
}}
}
}
$nMsg >> c:\$filedate.txt
invoke-item c:\$filedate.txt
==============================
稍微跑了一下
得到报告结果
经过美化之后的输出结果。。看着专业和舒心多了吧。。。
美化的方式是用HTML语言,在之前的博客中有提及,这边我就不说了
条件窗体的设计也完成了。。。之前的博客中也提到过。
其实这个脚本加测试我弄了一整天,我觉得写脚本只要有思路,写起来其实还挺快的。
谢谢各位支持!
本文完