コマンドでWindowsサービス一覧を取得したいときはないでしょうか。
けど、そんな中で悩むことは、
・コマンドでWindowsサービス一覧を取得した結果をExcelにまとめたいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・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
ステータスは稼働状態関係なく対象とし、サービス名を取得する内容となります。
結果です。
PowerShellのGet-Serviceコマンドで取得する
二つ目はPowerShellのGet-ServiceコマンドでWindowsサービス一覧を取得することができます。
以下はサンプルコマンドです。
Get-Service | Select-Object Name,Status,Displayname
Name,Status,Displaynameを対象に出力しています。
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」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・VBAとコマンドでWindowsサービス一覧を取得した結果をExcelにまとめる方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す