下面是我针对客户需求做了一个简单的PS脚本,我都加了中文注释,大家可以看看能不能看得懂,如果有需要请加入66140619 群讨论!
#requires -version 2
#Please run this script in exchange CAS Roles
#本脚本撰写者:徐鹏 如果你有脚本撰写需求,可以发送邮件到 10853913@qq.com 我将尽力实现
#脚本执行方法之一:.\get-performancedata.ps1 -Queryperformance 目的是生成当前时间点所有的CAS 连接数的一些数据,并告知用户当前时间点的数据已经收集完成
#脚本执行方法之二: .\get-performancedata.ps1 -SendPerformancedata 目的是将生成的数据以附件方式发往收件者
param
(
[switch] $Queryperformance,
#定义取数据库的开关
[switch] $SendPerformancedata,
#定义发送数据开关
[string] $TempLog="c:\tmpquery",
#定义数据产生目录,这个目录可以你在执行PS 自己定义
[string] $SmtpServer="tpkhubcasa.tpktest.com",
#定义发送邮件服务器
[string] $Sendfrom="administrator@tpktest.com",
#定义发送者
[string] $Mailreceive="administrator@tpktest.com"
#定义邮件接受者
)
#region Query Your Exchange Performance
if ($queryperformance)
#判断是否执行query performance 操作
{
if (!(Test-Path -Path $templog))
#判断在你的磁盘下面是否存在"c:\tmpquery"目录,上面条件是不存在
{
New-Item -ItemType directory -Path $templog
#新建上面提到的这个目录
}
$exchsvr=get-exchangeserver| Where-Object {$_.serverrole -like "*clientaccess*"}
#获取组织内所有Clientaccess 角色服务器,因为只有clientaccess 才有 rpcclientaccess服务
$Perdatas=@()
#定义数组为空
foreach ($exch in $exchsvr)
#进行计算机名称轮询。。foreach 函数和cmd 的for 函数一样
{
$count++
#参数自加
Write-Progress -Activity "Getting Performance Data Now,Please wait" -Status "Getting Now" -PercentComplete ($count /($exchsvr.count))
#在执行操作的时候为了让我们直观的看到一些反馈,我们需要上面的定义,如果不希望看到执行过程,则无需填写
$comuterperformancedata=Get-WmiObject Win32_PerfFormattedData_MSExchangeRpcClientAccess_MSExchangeRpcClientAccess -ComputerName $exch
#获取当前计算机的 MSExchangeRpcClientAccess指针的值
$Perdata=New-Object psobject
#创建一个叫做$perdata的 PSO 对象
$currenttime=(Get-Date).tostring("HH:mm")
#将当前时间以HH:mm字符串形式显示出来,HH 代表是24小时制
$Perdata |Add-Member -MemberType NoteProperty -name "当前时间" -Value $currenttime
#PSO对象添加一行属性,就是当前执行的时间,执行时间通过tostring 的方法规范输出的结果
$perdata |Add-Member -MemberType NoteProperty -Name "服务器名" -Value $exch
#PSO对象添加一行属性,将当前执行的服务器名称加入这列中
$Perdata |Add-Member -MemberType NoteProperty -Name "连接数总数" -Value $comuterperformancedata.connectioncount
#添加一列,将开始获取的$comuterperformancedata的连接总数获取出来
$Perdata |Add-Member -MemberType NoteProperty -Name "用户连接数" -Value $comuterperformancedata.usercount
#添加一列,将$comuterperformancedata 用户连接数获取出来
$Perdata |Add-Member -MemberType NoteProperty -Name "活动用户连接数" -Value $comuterperformancedata.activeusercount
#添加一列,将$comuterperformancedata 活动用户连接数获取出来
$Perdatas =$Perdatas+$Perdata
#将当前的组织内的服务器所有数据获取出来,组成一个数组
}
$outputpath=$templog+"\"+"performance"+$(get-date -Format "yyyy-MM-dd")+".csv"
#生成CSV存在路径,名称格式为年-月-日,这个文件每天产生一个
if (!(test-path -Path $outputpath))
#判断上面的路径是否存在,根据存在与否执行不同的语句
{
$Perdatas |Export-Csv -Encoding default -notypeinformation -Path $outputpath
#如果不存在CSV文件,我们将perdatas 中的数组输出为csv文件
}
else
{
$Perdatas |ConvertTo-Csv -NoTypeInformation |select -Last $exchsvr.count |Out-File -Encoding default -Append -FilePath $outputpath
#如果存在CSV 文件,我们就将上面的数据以添加的方式导入到csv文件中
}
$messagebody ="Dear sir:
Perforcae count in exchange cas has been collect. Current colleting time is"+$currenttime
#设置邮件主体
Send-MailMessage -SmtpServer $SmtpServer -From $Sendfrom -To $Mailreceive -Subject "Exchange Performance counter has been collected" -Body $messagebody
#发送邮件告知收件人数据已经收集到并且已经产生
}
#endregion
#region SendMailaddress
if ($SendPerformancedata)
{
$sendfilepath=$TempLog+"\"+"performance"+(Get-Date -Format "yyyy-MM-dd")+".csv"
#验证文件目录是否存在
$bodymessage="Dear Sir:
This is mesage from Exchange Server,you can check attachment for further information of performance data.
Best Regards"
#邮件主题和内容
if (test-path -Path $sendfilepath)
#判断目录是否存在
{
Send-MailMessage -SmtpServer $SmtpServer -From $Sendfrom -To $Mailreceive -Subject "Please Check today's Exchange Server Performance Data" -Body $bodymessage -Attachments $sendfilepath
#如果文件存在,我们直接将文件以附件方式发送邮件给定义好的邮件发送人
}
else
{
Send-MailMessage -SmtpServer $SmtpServer -From $Sendfrom -To $Mailreceive -Subject "File Does not exist" -Body "Sorry sir,File Does not exist.Please check file in exchange server"
#如果文件不存在,我们发送邮件告知收件人,文件不存在
}
}
#endregion