WindowsのSIDを取得する

経緯

Windows のローカルアカウントのSIDを調べる必要がでてきました。 欲しいのはローカルユーザのみ。ドメインユーザを取ってくると多すぎるので弾きます。

取得方法

調べると下記のようなコマンドがよく出てくる。

Get-WmiObject win32_useraccount name,sid

が、実行してもエラーになってしまいます。

Get-WmiObject: The term 'Get-WmiObject' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

どうやらコマンドが廃止になってしまったみたいです。 今はPowerShell 経由でこちらのコマンドがいいようです。

Get-CimInstance -ClassName Win32_UserAccount | ? { $_.LocalAccount -eq $true }

引用元:https://tex2e.github.io/blog/powershell/list-user

これでOK

グループのSIDをとりたい

こちらはちょっと別。 グループのSIDを全部さくっと検索するなら

WMIC group get name,sid

PowerShellでローカルグループだけ拾うならこんな感じ。

Get-CimInstance -ClassName Win32_Group | ? { $_.LocalAccount -eq $true }

おまけ

これまでのコマンドで分かる通り、適切なClassNameが分かれば色々とってこれそう。 というわけでどんなClassNameがあるの?(WMIオブジェクトがあるの?)となるのですが、調べ方は公式に記載があります。 https://learn.microsoft.com/ja-jp/powershell/scripting/samples/getting-wmi-objects--get-ciminstance-?view=powershell-7.3

一覧を引っ張ってくるならソートした方が見やすいと思う。

Get-CimClass -Namespace root/CIMV2 |  Where-Object CimClassName -like Win32* |  Select-Object CimClassName | Sort-Object CimClassName