複数のサーバで自動サービスが開始されているか一括チェックする

はじめに

指定したサーバで自動サービスが開始されているかをチェックするスクリプトです。複数のサーバや除外したいサービスを指定することができます。

環境

OS:Windows10
.Net Framework:4.7
PowerShellのバージョン:5.1.17134.858

ソースコード

AutoServiceCheck.ps1

#######################################################################################
# 概要:指定したサーバで自動サービスが起動しているかチェックします。
# 作成者:ITStudy
# 作成日:2019/12/15
# 必要なファイル:AutoServiceCheck.ps1(このファイルです)
#                 ServersList.csv(対象サーバを記載したCSVファイルです)
#                 SkipServiceList.csv(スキップするサービスを記載したCSVファイルです)
#######################################################################################

$CurrentDir      = $PSScriptRoot
$ServersList     = "ServersList.csv"
$Result          = "Result.csv"
$SkipServiceList = "SkipServiceList.csv"

function SkipService($dt){
    Import-Csv (Join-Path $CurrentDir $SkipServiceList) -Encoding Default | %{
        $ss = $_.Service
        $dt = $dt | ?{$_.DisplayName -ne $ss}
    }
    return ($dt)
}

$aryOutputData = @()
Import-Csv (Join-Path $CurrentDir $ServersList) -Encoding Default | %{
    $aryOutputData += [pscustomobject]@{HostName = $_.HostName; Status = ""; Service = ""}
    $aryOutputData | Export-Csv -NoTypeInformation (Join-Path $CurrentDir $Result) -Encoding Default
}

$CheckCSV = Import-Csv (Join-Path $CurrentDir $Result) -Encoding Default
$CheckCSV | %{
$dt = ""
$dt = Get-Service -ComputerName $_.HostName | ?{$_.StartType -eq "Automatic" -and $_.Status -ne "Running"}
$dt = SkipService($dt)
    if ($dt.count -eq 0){
        $_.Status = "OK"
        $_.Service = "-"
    }else{
        $_.Status = "NG"
        $_.Service = $dt.DisplayName -join ", "
    }
}
#画面出力
$CheckCSV | Format-Table -AutoSize -Wrap


#CSV出力
$CheckCSV | Export-Csv -NoTypeInformation (Join-Path $CurrentDir $Result) -Encoding Default

ServersList.csv

対象サーバのホスト名、もしくはIPアドレスを入力します。ヘッダーの「HostName」は削除しないで下さい。

HostName
windows2003
windows2008
windows2012

SkipServiceList.csv

除外したいサービス名(DisplayName)を入力します。ヘッダーの「Service」は削除しないで下さい。

Service
Performance Logs and Alerts
Diagnostic Policy Service
Shell Hardware Detection
Software Protection

結果

自動サービスで開始していないサービスが表示されます。

HostName    Status Service                                      
--------    ------ -------                                      
windows2003 OK     -                                            
windows2008 OK     -                                            
windows2012 NG     Google Update サービス (gupdate), Remote Registry
タイトルとURLをコピーしました