PowerShell收集服務器日檢報告,併發郵件給管理員腳本修改應用於生產環境實例

前陣子看了大向的一篇文章,感覺他分享的腳本非常好用。原文地址: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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章