複数のサーバで指定したサービスを開始する

スポンサーリンク

はじめに

指定したサーバのサービスを開始するスクリプトです。サーバとサービスは複数指定することができます。

環境

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

ソースコード

ServiceStart.ps1

#######################################################################################
# 概要:指定したサーバのサービスを開始します。
# 作成者:ITStudy
# 作成日:2020/02/16
# 必要なファイル:ServiceStart.ps1(このファイルです)
#                 ServersList.csv(対象サーバを記載したCSVファイルです)
#                 ServicesList.csv(開始するサービスを記載したCSVファイルです)
#######################################################################################

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

try{
	#指定したサービスを配列に格納
	Import-Csv (Join-Path $CurrentDir $ServicesList) -Encoding Default | %{
	    $aryServicesList += $_.ServiceName
	}

	#複数のサーバから指定したサービスを開始する
	Import-Csv (Join-Path $CurrentDir $ServersList) -Encoding Default | %{
	    #エラー配列を初期化
	    $error.Clear()
	    #ホスト名の取得(HostName)
	    $hn = $_.HostName
	    #サービス名の初期化(DisplayName)
	    $dn=""
        #指定したサービスの開始
	    $sl = Get-Service -ComputerName $hn | ? {$_.DisplayName -in @($aryServicesList) -and $_.Status -eq "Stopped"}
	    $sl | Start-Service

        #開始したサービスの取得&カンマで連結
	    $sl |  % {    
	        if($dn -eq ""){
	            $dn += ($_.DisplayName)
	        }
	        else{
	            $dn += (", " + $_.DisplayName  )
	        }
        }

	    $StartedService += [pscustomobject]@{"HostName"=$hn; "Started Service"=$dn; "Check DateTime"=(Get-Date).ToString("yyyy/MM/dd HH:mm:ss"); "ErrorMessage"=$error[0]}
	    #進行状態を表示   
	    Write-Host($hn + "を処理中です。")
	}
	#結果表示
	$StartedService | Format-Table -AutoSize -Wrap
	#レポート出力
	$StartedService | Export-Csv -NoTypeInformation (Join-Path $CurrentDir $Report) -Encoding Default
}Catch{
    $Error
}

ServersList.csv

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

HostName
windows2003
windows2008
windows2012
windows2016
windows2019

ServicesList.csv

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

ServiceName
Remote Registry
Windows Biometric Service

結果

Report-YYYYMMDD.csv

指定したサーバのサービスを開始します。すでにサービスが開始している場合やサービスが存在しない場合はスキップします。

HostName    Started Service                            Check DateTime      ErrorMessage
--------    ---------------                            --------------      ------------
windows2003 Remote Registry                            2020/06/28 02:15:29             
windows2008 Remote Registry                            2020/06/28 02:15:29             
windows2012 Remote Registry                            2020/06/28 02:15:29             
windows2016 Remote Registry, Windows Biometric Service 2020/06/28 02:15:29             
windows2019 Remote Registry, Windows Biometric Service 2020/06/28 02:15:30