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

はじめに

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

ドメインに参加していることを前提にしているため、ワークグループのサーバや専用アカウントでアクセスする必要がある場合は、以下をご参照下さい。

環境

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

ソースコード

AutoServiceCheck.ps1

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

$CurrentDir            = $PSScriptRoot
$ServersList           = "ServersList.csv"
$SkipServiceList       = "SkipServiceList.csv"
$Report                = "Report-$(Get-Date -f yyyyMMdd).csv"
$aryServicesList       = @()
$UnstartedServiceCheck = @()
$ErrorActionPreference = "SilentlyContinue"

try{
	Import-Csv (Join-Path $CurrentDir $SkipServiceList) -Encoding Default | %{
	    $aryServicesList += $_.ServiceName
	}

	Import-Csv (Join-Path $CurrentDir $ServersList) -Encoding Default | %{

	    #エラー配列を初期化
	    $error.Clear()
	    #ホスト名の取得(HostName)
	    $hn = $_.HostName
	    #サービス名の初期化(DisplayName)
	    $dn=""

	    #自動サービスの起動チェック
	    $sl = Get-Service -ComputerName $hn | ?{$_.StartType -eq "Automatic" -and $_.Status -ne "Running" -and $_.DisplayName -notin @($aryServicesList)}
	    #未起動サービスの取得&カンマで連結
	    $sl |  % {    
	        if($dn -eq ""){
	            $dn += ($_.DisplayName)
	        }
	        else{
	            $dn += (", " + $_.DisplayName  )
	        }
	    }

	    $UnstartedServiceCheck += [pscustomobject]@{"HostName"=$hn; "Unstarted Service"=$dn; "Check DateTime"=(Get-Date).ToString("yyyy/MM/dd HH:mm:ss"); "ErrorMessage"=$error[0]}
	    #進行状態を表示   
	    Write-Host($hn + "を処理中です。")
	}

	#結果表示   
	$UnstartedServiceCheck | Format-Table -AutoSize -Wrap
	#CSV出力
	$UnstartedServiceCheck | Export-Csv -NoTypeInformation (Join-Path $CurrentDir $Report) -Encoding Default
}Catch{
    $Error
}

ServersList.csv

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

HostName
windows2003
windows2008
windows2012
windows2016
windows2019

SkipServiceList.csv

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

ServiceName
Performance Logs and Alerts
Diagnostic Policy Service
Shell Hardware Detection
Software Protection
Microsoft .NET Framework NGEN v4.0.30319_X64
Microsoft .NET Framework NGEN v4.0.30319_X86
Windows Biometric Service
Remote Registry
Downloaded Maps Manager

結果

Report-YYYYMMDD.csv

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

HostName    Unstarted Service                Check DateTime       ErrorMessage                                                              
--------    -----------------                --------------       ------------                                                              
windows2003                                  2020/06/07 11:13:08                                                                           
windows2008                                  2020/06/07 11:14:17 
windows2012 Google Update サービス (gupdate) 2020/06/07 11:14:18                                                                           
windows2016 Google Update サービス (gupdate) 2020/06/07 11:14:19                                                                           
windows2019 Google Update サービス (gupdate) 2020/06/07 11:14:19          
タイトルとURLをコピーしました