PowerShell收集服务器日检报告,并发邮件给管理员脚本修改应用于生产环境实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PowerShell收集服务器日检报告,并发邮件给管理员脚本修改应用于生产环境实例相关的知识,希望对你有一定的参考价值。

前阵子看了大向的一篇文章,感觉他分享的脚本非常好用。原文地址:http://blog.51cto.com/hubuxcg/1604582

但是在部署的过程中还是遇到了种种问题,现在就瑾以此文以作记录。

  1. 最开始遇到的问题是脚本无法读取CPU的使用。原代码如下:

$CPULoad=(Get-WmiObject  win32_Processor -computername $Computer ).LoadPercentage

    检查后发现原来是服务器的CPU有2颗所以无法显示所至,故代码修改为:

$CPULoad=(gwmi –computername $Computer win32_Processor)|select LoadPercentage|foreach{echo "cpu:" $_.LoadPercentage}

    这样有多颗CPU也可以进行读取了。

    2.该脚本运行需要运行命令账号对该机器有管理员权限,我司在域内其他机器是拿掉了域的administrator账号。所以需要专门开一个账号对脚本进行操作。

    技术分享图片

    新开账号后加入builtin的administrators群组内,该账号就有对域内DC的管理权限了。

    另,我是用该账号运行脚本,故要在想读取内容的所有服务器管理员组内都要加上该账号。

3.计划任务无法执行

    原代码:

$ServerName=(Get-Content ".\serverlist.txt")

    问题就出在这里,如果要把脚本添加到计划任务内,那么不能使用相对地址,而是要用绝对地址。

$ServerName=(Get-Content "D:\script\serverlist.txt")

    修改后就无问题了。

4.原脚本需要开放执行主机的匿名relay用来发送邮件。如果出于安全考虑不想开放该主机的匿名relay权限。则可以修改如下位置:

Send-MailMessage @email

    修改为:

$ss=ConvertTo-SecureString -String "实际账号密码" -AsPlainText -force
$ss|Write-Host
$cre= New-Object System.Management.Automation.PSCredential("实际账号",$ss)

之后再增加参数

Send-MailMessage @email -Credential $cre

5.该脚本主要使用wmi类读取服务器内容。而wmi类也可以使用-Credential 参数增加凭据,那么读取非加域机器就成为了可能。

    原理一样在脚本的前面增加凭据代码

$ss=ConvertTo-SecureString -String "实际账号密码" -AsPlainText -force
$ss|Write-Host
$cre= New-Object System.Management.Automation.PSCredential("实际账号",$ss)

    之后在每一个Get-WmiObject  win32_Processor后增加参数-Credential 添加凭据即可

    为什么要这么干呢。而不是在非加域机器本身上执行?因为公司还有一些2003的机器不加域,也没powershell。。。

    在这里遇到一个问题,读取日志功能Get-EventLog,找到了使用wmi类代替的Get-WmiObject  -Class Win32_NTLogEvent 但是需要根据语言的不同修改对应的内容

    原:

$ApplicationEvents = Get-EventLog -ComputerName $Computer -LogName Application -EntryType Error,Warning -Newest $EventNum

    修改后:

$ApplicationEvents =Get-WmiObject -ComputerName $Computer -Credential $cre -Class Win32_NTLogEvent -Filter '(Type="错误" or Type="警告")and LogFile="Application"' |select -First $EventNum -Property type, TimeGenerated,sourcename, message

    如果是英文系统则改为(Type="Error" or Type="Warning")即可。

6.wmi需要打开防火墙对应端口,

    使用cmd命令如下:

    netsh firewall set service RemoteAdmin enable

    或者

    netsh advfirewall set allprofiles settings remotemanagement enable 



修改后的脚本下载地址:

http://down.51cto.com/data/2440489





以上是关于PowerShell收集服务器日检报告,并发邮件给管理员脚本修改应用于生产环境实例的主要内容,如果未能解决你的问题,请参考以下文章

powershell 监控SharePoint,本地服务器和SQL服务,页面并向某人发送报告电子邮件。

O365 PowerShell Script隔离邮件报告

Powershell脚本调用表达式查看传递给调用脚本的字符串参数并在其中查找错误

POWERSHELL 计划任务的创建,收集DC中失败的登录信息并邮件通知

在 Java 应用程序中收集异常报告

如何使用PowerShell在邮件主题中添加日期