#概要
WindowsのService一覧をCSVに出力するスクリプト。
トリガー開始や遅延開始など詳細を出力することができます。
参考資料を基に組み込んだ。
もっと良い方法があれば教えてください。
#ソースコード
##Ver2.1
構築の都合でログオン名を取得する必要が出たため、
取得できるように追記しました。
大きな変更はしてません。
※ID付きサービスは取れない…
ExportServiceList.PS1
#Script :Windows Services List Export Scripts
#Creater:海里
#Version:2.1
#Update :2021.02.04
$triggers = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" |
Where-Object { $_.GetSubkeyNames().Contains("TriggerInfo") } |
ForEach-Object { $_.Name.Split("\")[-1] }
$startMode = @{ Manual = "手動"; Disabled = "無効"; Auto = "自動"; Unknown = "不明" }
$startOption = @{ 01 = " (トリガー開始)"; 10 = " (遅延開始)"; 11 = " (遅延開始、トリガー開始)" }
$serviceData = Get-CimInstance -ClassName Win32_Service | Select-Object @(
@{ n = "表示名"; e = { $_.DisplayName } }
@{ n = "サービス名"; e = { $_.Name } }
@{ n = "スタートアップの種類"; e = { $startMode[$_.StartMode] + $startOption[10 * ($_.StartMode -eq "Auto" -and $_.DelayedAutoStart) + $triggers.Contains($_.Name)] } }
@{ n = "状態"; e = { if($_.State -eq "Running") { "実行" } else { "停止" } } }
@{ n = "ログオン"; e = { $_.StartName } }
)
$serviceData."表示名"
$serviceData | Export-Csv Outputlog.csv -NoTypeInformation -Encoding Default
"`nサービス一覧を記録しました。"
##Ver2.0
toruntaさんから提案頂いたもの。
Ver1よりも処理速度が速い。
ServiceCSVoutput(Ver2).ps1
#Script :Windows Services List Export Scripts
#Creater:海里
#Version:2.0
#Update :2019
$triggers = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" |
Where-Object { $_.GetSubkeyNames().Contains("TriggerInfo") } |
ForEach-Object { $_.Name.Split("\")[-1] }
$startMode = @{ Manual = "手動"; Disabled = "無効"; Auto = "自動"; Unknown = "不明" }
$startOption = @{ 01 = " (トリガー開始)"; 10 = " (遅延開始)"; 11 = " (遅延開始、トリガー開始)" }
$serviceData = Get-CimInstance -ClassName Win32_Service | Select-Object @(
@{ n = "表示名"; e = { $_.DisplayName } }
@{ n = "サービス名"; e = { $_.Name } }
@{ n = "スタートアップの種類"; e = { $startMode[$_.StartMode] + $startOption[10 * ($_.StartMode -eq "Auto" -and $_.DelayedAutoStart) + $triggers.Contains($_.Name)] } }
@{ n = "状態"; e = { if($_.State -eq "Running") { "実行" } else { "停止" } } }
)
$serviceData."表示名"
$serviceData | Export-Csv Outputlog.csv -NoTypeInformation -Encoding Default
"`nサービス一覧を記録しました。"
##Ver1.0
ServiceCSVoutput(Ver1).ps1
#Script :Windows Services List Export Scripts
#Creater:海里
#Version:1.0
#Update :2019
$OutputSVS= @()
Get-WmiObject -Class Win32_Service | Foreach{
$ts = 0
$ds = 0
$Properties=@{
"DisplayName" = $_.DisplayName
"Name" = $_.Name
"StartMode" = $_.StartMode
"State" = $_.State
}
switch($Properties.StartMode) {
"Manual" { $Properties.StartMode = "手動" }
"Disabled" { $Properties.StartMode = "無効" }
"Auto" { $Properties.StartMode = "自動" }
}
switch($Properties.State) {
"Running" {$Properties.State="実行"}
"Stopped" {$Properties.State="停止"}
}
if (Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$($Properties.Name)\TriggerInfo\") {
$ts = 1
}
if ($Properties.StartMode -eq "Auto" -and $Properties.DelayedAutoStart -eq 1){
$ds = 1
}
if ($ts -eq 1 -Or $ds -eq 1) {
if ($ts -eq 1 -and $ds -eq 1) {
$Properties.StartMode = "$($JS) (遅延開始、トリガー開始)"
}
Elseif ($ts -eq 1) {
$Properties.StartMode = "$($JS) (トリガー開始)"
}
Elseif ($ds -eq 1) {
$Properties.StartMode = "$($JS) (遅延開始)"
}
}
$OutputSVS += (New-Object -typename PSObject -property $Properties|Select @{name="表示名";Expression={$Properties.DisplayName}},`
@{name="サービス名";Expression={$Properties.Name}},@{name="スタートアップの状態";Expression={$Properties.StartMode}},`
@{name="状態";Expression={$Properties.State}})
Write-Host $Properties.DisplayName
}
$OutputSVS |Export-CSV Outputlog.csv -NoTypeInformation -encoding Default
Write-Host "サービス一覧を記録しました。"
#参考資料
●Windowsの謎 ~サービス一覧を出すコマンド~