前阵子看了大向的一篇文章,感觉他分享的脚本非常好用。原文地址:https://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账号。所以需要专门开一个账号对脚本进行操作。

    @_P4OL{3(YE$G_~}H@JEHAF.png

    新开账号后加入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