質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

2回答

2665閲覧

powershellでトリガー情報を含むサービス一覧をサービス名昇順で出力したい

hi04

総合スコア22

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

0クリップ

投稿2022/03/09 10:59

以下サイトのソースでは、サービス名が一覧取得されますが、アルファベット順にソートされていません。
Windowsの謎 ~サービス一覧を出すコマンド~
https://qiita.com/Mr-K/items/0ab787135eb4ec3b3a1c


$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 = { $.Name } }
@{ n = "スタートアップの種類"; e = { $startMode[$
.StartMode] + $startOption[10 * ($.StartMode -eq "Auto" -and $.DelayedAutoStart) + $triggers.Contains($_.Name)] } }

)
$serviceData

■出力結果
サービス名   スタートアップの種類
----------   --------------------
gupdate   自動 (遅延開始)
AllJoyn Router Service 手動(トリガー開始)
sedsvc   自動 (遅延開始)
CDPSvc   自動 (遅延開始、トリガー開始)
MapsBroker   自動 (遅延開始)

これを以下のようにアルファベット順にソートしたいのですが、うまくいきません。

■出力イメージ
サービス名   スタートアップの種類
----------   --------------------

AllJoyn Router Service 手動(トリガー開始)
CDPSvc   自動 (遅延開始、トリガー開始)
gupdate   自動 (遅延開始)
MapsBroker   自動 (遅延開始)
sedsvc   自動 (遅延開始)

$serviceDataに続くコマンドをどのように記述すれば期待する出力になるか、ご教示お願いできますでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

■「サービス名」でソートするプログラムです

PowerShell

1$triggers = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" | 2 Where-Object { $_.GetSubkeyNames().Contains("TriggerInfo") } | 3 ForEach-Object { $_.Name.Split("\")[-1] } 4 5$startMode = @{ Manual = "手動"; Disabled = "無効"; Auto = "自動"; Unknown = "不明" } 6$startOption = @{ 01 = " (トリガー開始)"; 10 = " (遅延開始)"; 11 = " (遅延開始、トリガー開始)" } 7 8$serviceData = Get-CimInstance -ClassName Win32_Service | Select-Object @( 9 @{ n = "名前"; e = { $_.DisplayName } } # 変更しました 表示名 → 名前 10 @{ n = "サービス名"; e = { $_.Name } } 11 @{ n = "スタートアップの種類"; e = { $startMode[$_.StartMode] + $startOption[10 * ($_.StartMode -eq "Auto" -and $_.DelayedAutoStart) + $triggers.Contains($_.Name)] } } 12 @{ n = "状態"; e = { if($_.State -eq "Running") { "実行" } else { "停止" } } } 13) 14$serviceData = @($serviceData | Sort-Object {$_."サービス名"} | Select-Object サービス名,スタートアップの種類) 15$serviceData | Format-Table * -AutoSize -Wrap 16cmd /c "pause"

■「名前」でソートするプログラムです

PowerShell

1$triggers = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" | 2 Where-Object { $_.GetSubkeyNames().Contains("TriggerInfo") } | 3 ForEach-Object { $_.Name.Split("\")[-1] } 4 5$startMode = @{ Manual = "手動"; Disabled = "無効"; Auto = "自動"; Unknown = "不明" } 6$startOption = @{ 01 = " (トリガー開始)"; 10 = " (遅延開始)"; 11 = " (遅延開始、トリガー開始)" } 7 8$serviceData = Get-CimInstance -ClassName Win32_Service | Select-Object @( 9 @{ n = "名前"; e = { $_.DisplayName } } # 変更しました 表示名 → 名前 10 @{ n = "サービス名"; e = { $_.Name } } 11 @{ n = "スタートアップの種類"; e = { $startMode[$_.StartMode] + $startOption[10 * ($_.StartMode -eq "Auto" -and $_.DelayedAutoStart) + $triggers.Contains($_.Name)] } } 12 @{ n = "状態"; e = { if($_.State -eq "Running") { "実行" } else { "停止" } } } 13) 14$serviceData = @($serviceData | Sort-Object {$_."名前"} | Select-Object サービス名,スタートアップの種類) 15$serviceData | Format-Table * -AutoSize -Wrap 16cmd /c "pause"

■手順■

①拡張子ps1ファイルを作成して、このプログラムを貼り付けて保存します。

②ps1ファイルをコンテキストメニューから「PowerShell で実行」を選択します。

■注意事項■

ご提示頂いたプログラムに、¥マーク、アンダーバーの欠損がありましたので、
修正しています。こちらのプログラムをご利用ください。

$serviceData は Format-Table を使用して表示してください。

厳しい寒さが続いております。
体調を崩されぬようお気をつけください。

投稿2022/03/09 23:43

ccc-

総合スコア342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参照されているページにも記載されている通りです。

使い方
こんな感じ
select や、where 、 sort -Property "Name"とパイプでつないで表示を絞っています。

Powershell

1$serviceData | Sort -Property サービス名

投稿2022/03/09 12:12

編集2022/03/09 12:19
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hi04

2022/03/09 13:09

返答ありがとうございます。 すみません、「$serviceData | Sort -Property サービス名」ではなく、サービス一覧をアルファベット順に並べたいです。
Y.H.

2022/03/09 13:19 編集

質問記載の「■出力イメージ」が期待されている結果ではないのでしょうか? それを実行するとサービス名順にソートされて一覧表示されますが 異なるのであれば具体的にどう異なるか質問に記載ください。 PS C:\> $serviceData | Sort -Property サービス名 サービス名 スタートアップの種類 ---------- -------------------- AarSvc_1e37c2 手動 AcrSch2Svc 自動 AdobeARMservice 自動 afcdpsrv 自動 AJRouter 手動 (トリガー開始) ALG 手動
Y.H.

2022/03/09 13:24

もしかしてソートした結果を 変数へ設定したい? PS C:\>$serviceData=($serviceData | Sort -Property サービス名) PS C:\>$serviceData サービス名 スタートアップの種類 ---------- -------------------- AarSvc_1e37c2 手動 AcrSch2Svc 自動 AdobeARMservice 自動 afcdpsrv 自動 AJRouter 手動 (トリガー開始) ALG 手動
Y.H.

2022/03/09 13:27

$serviceData にソートされていないサービス一覧が設定されている状態で実行されてますよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問