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

はじめに

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

環境

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

ソースコード

AutoServiceCheck.ps1

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

$CurrentDir      = $PSScriptRoot
$InputFile       = "ServersList.csv"
$OutputFile      = "Result.csv"
$SkipServiceList = "SkipService.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 $InputFile) -Encoding Default | %{
    $aryOutputData += [pscustomobject]@{HostName = $_.HostName; Status = ""; Service = ""}
    $aryOutputData | Export-Csv -NoTypeInformation (Join-Path $CurrentDir $OutputFile) -Encoding Default
}

$CheckCSV = Import-Csv (Join-Path $CurrentDir $OutputFile) -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 | Export-Csv -NoTypeInformation (Join-Path $CurrentDir $OutputFile) -Encoding Default

#画面出力
#$CheckCSV

ServersList.csv

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

HostName
windows2003
windows2008
windows2012

SkipService.csv

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

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

結果

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

HostName    Status Service                             
--------    ------ -------                             
windows2003 OK     -                                   
windows2008 OK     -                                   
windows2012 NG     Remote Registry, Software Protection
タイトルとURLをコピーしました