Windowsサービス一覧の取得コマンド紹介!Excelから操作/取得!

Windowsサービス一覧の取得コマンド紹介!Excelから操作/取得!

コマンドでWindowsサービス一覧を取得したいときはないでしょうか。

けど、そんな中で悩むことは、

・コマンドでWindowsサービス一覧を取得したいが方法がよくわからない
・コマンドでWindowsサービス一覧を取得した結果をExcelにまとめたいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・コマンドでWindowsサービス一覧を取得する方法
・VBAとコマンドでWindowsサービス一覧を取得した結果をExcelにまとめる方法

についてまとめます!

VBAとコマンドでWindowsサービス一覧を取得した結果をExcelにまとめるイメージ

VBAとコマンドでWindowsサービス一覧を取得した結果をExcelにまとめるイメージについて説明をします。

Excel側にWindowsサービス一覧の出力先となるパスを記載します。

VBAを実行すると、PowerShellコマンドが実行され、サービス一覧を取得し、CSV形式で指定先のパスへ出力されます。

さらに出力したCSVファイルをExcel側からデータ参照することにより、Excelからもサービス一覧が見ることができます。

VBAを再実行しCSVデータを更新すると、Excel側も自動更新され、最新のサービス状態を見ることができます。

タカヒロ
タカヒロ
サービス稼働状態を確認したいときにボタンワンぽちでできますので、便利ですね!

それでは早速試してみましょう。

コマンドでWindowsサービス一覧を取得する方法

コマンドでWindowsサービス一覧を取得する方法について説明をします。

コマンドプロンプトのsc queryコマンドで取得する

一つ目はコマンドプロンプトのsc queryコマンドでWindowsサービス一覧を取得することができます。
以下はサンプルコマンドです。

sc query state= all | findstr /B SERVICE_NAME

ステータスは稼働状態関係なく対象とし、サービス名を取得する内容となります。

結果です。

タカヒロ
タカヒロ
sc queryコマンドは各サービスの状態など詳細情報は含まれません。

PowerShellのGet-Serviceコマンドで取得する

二つ目はPowerShellのGet-ServiceコマンドでWindowsサービス一覧を取得することができます。
以下はサンプルコマンドです。

Get-Service | Select-Object Name,Status,Displayname

Name,Status,Displaynameを対象に出力しています。

タカヒロ
タカヒロ
Get-Serviceだけですと、Nameが「…」の省略表記になりますので気を付けましょう。

VBAとコマンドでWindowsサービス一覧を取得した結果をExcelにまとめる方法

今回のメインとなるVBAとコマンドでWindowsサービス一覧を取得した結果をExcelにまとめる方法について説明をします。

CSV保存先フォルダを用意する

CSV保存先フォルダを用意しましょう。

Excelブックを用意する

Excelブックを用意しましょう。VBAを実装するので、マクロ有効形式のxlsmで保存してください。

次に1シート目のB1セルへ先ほどのCSV保存先フォルダのパスと、任意のCSV名を入力します。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub Windowsサービス一覧を取得する()
    
    Dim intResult As Integer
    
    'Windowsサービス一覧取得コマンドを設定し実行します。
    intResult = PowerShell実行Run版("Get-Service | Select-Object Name,Status,Displayname | Export-CSV " & ThisWorkbook.Worksheets(1).Cells(1, 2) & " -encoding Default")

    'コマンド実行結果を表示させます。
    If intResult = 0 Then
        MsgBox "Windowsサービス一覧を取得しました。"
    Else
        MsgBox "Windowsサービス一覧の取得に失敗しました。CSV保存先を確認してください。"
    End If

End Sub

Function PowerShell実行Run版(strCmd As String) As String

    Dim objShell As Object
    Dim intResult As Integer
 
     'WshShellオブジェクトをセットします。
    Set objShell = CreateObject("WScript.Shell")

    intResult = objShell.Run(Command:="powershell -ExecutionPolicy RemoteSigned -Command " & strCmd, WindowStyle:=0, WaitOnReturn:=True)

    'PowerShell実行結果を返します。0:成功 1:失敗
    PowerShell実行Run版 = intResult
 
End Function

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

“Windowsサービス一覧を取得しました。”と表示されれば成功です。

フォルダにCSVファイルが生成され、

中身を見るとサービス名一覧が取得されていることがわかりますね!

タカヒロ
タカヒロ

“Windowsサービス一覧の取得に失敗しました。CSV保存先を確認してください。”が表示されたらパスの指定が誤っているか、CSVファイルを開きっぱなしにしているか、アクセス権がない可能性がありますので、確認をしてください。

VBAの説明

VBAの内容について説明をします。

Windowsサービス一覧取得コマンドを設定し実行します。CSV出力先のパスは1シート目のB1セルから取得しています。

intResult = PowerShell実行Run版("Get-Service | Select-Object Name,Status,Displayname | Export-CSV " & ThisWorkbook.Worksheets(1).Cells(1, 2) & " -encoding Default")

コマンド実行結果を表示させます。

If intResult = 0 Then
MsgBox "Windowsサービス一覧を取得しました。"
Else
MsgBox "Windowsサービス一覧の取得に失敗しました。CSV保存先を確認してください。"
End If

こちらからPowerShellコマンド実行用の関数となります。

WshShellオブジェクトをセットします。

Set objShell = CreateObject("WScript.Shell")

RunでPowerShellコマンドを実行します。

intResult = objShell.Run(Command:="powershell -ExecutionPolicy RemoteSigned -Command " & strCmd, WindowStyle:=0, WaitOnReturn:=True)

PowerShell実行結果を返します。0:成功 1:失敗の内容となります。

PowerShell実行Run版 = intResult

ExcelからCSVデータを参照する

仕上げに、ExcelからCSVデータを参照するよう設定し、CSVを開かなくてもExcelからWindowsサービス一覧を見れるようにしましょう。

[データ]タブの[テキストまたはCSVから]ボタンをクリックします。

CSVファイルを選択しインポートボタンをクリックします。

[データの変換ボタン]をクリックし、PowerQueryエディターを開きます。

不要な1行があるので、それを削除します。

[ホーム]タブの行の削除>[上位の行の削除]をクリックします。

1行目を指定し、[OK]をクリックします。

次に[1行目をヘッダーとして使用]をクリックします。

項目名が変わったことを確認できたら

[閉じて読み込む]をクリックします。

シートが生成され、CSVのデータが取り込まれたら完成です!

ExcelからVBAを実行しCSVデータを再取得する

ExcelからVBAを実行しCSVデータを再取得してみましょう。

VBAにデータを更新する処理を追加します。
これは[データ]タブの[すべて更新]と同じ処理内容となります。

ActiveWorkbook.RefreshAll

コード全体は以下の通りです。

Sub Windowsサービス一覧を取得する()
    
    Dim intResult As Integer
    
    'Windowsサービス一覧取得コマンドを設定し実行します。
    intResult = PowerShell実行Run版("Get-Service | Select-Object Name,Status,Displayname | Export-CSV " & ThisWorkbook.Worksheets(1).Cells(1, 2) & " -encoding Default")

    'データを更新します。
    ActiveWorkbook.RefreshAll


    'コマンド実行結果を表示させます。
    If intResult = 0 Then
        MsgBox "Windowsサービス一覧を取得しました。"
    Else
        MsgBox "Windowsサービス一覧の取得に失敗しました。CSV保存先を確認してください。"
    End If

End Sub

Function PowerShell実行Run版(strCmd As String) As String

    Dim objShell As Object
    Dim intResult As Integer
 
     'WshShellオブジェクトをセットします。
    Set objShell = CreateObject("WScript.Shell")

    intResult = objShell.Run(Command:="powershell -ExecutionPolicy RemoteSigned -Command " & strCmd, WindowStyle:=0, WaitOnReturn:=True)

    'PowerShell実行結果を返します。0:成功 1:失敗
    PowerShell実行Run版 = intResult
 
End Function

一覧表のステータスが変わるか確認

確認のため一部のサービスを停止して、そのステータスが変わったか確認をしてみましょう。

VBAを実行します。

はい、Excel側のWindowsサービス一覧が更新され、先ほどの操作したサービスのステータスが変わっていることが確認できましたね!!

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・コマンドでWindowsサービス一覧を取得する方法
・VBAとコマンドでWindowsサービス一覧を取得した結果をExcelにまとめる方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です