指定したグループのWindowsドメインコントローラー(Server 2012 R2)のすべての詳細を含むすべてのユーザーアカウントを一覧表示するコマンドを検索/作成したいと思います。
「ネットユーザー」の使用は完璧ですが、このコマンドの出力をすべてのユーザーに対して1つのアクションで実行する方法がわかりません(詳細を知りたい場合は、ユーザーごとにこのコマンドを個別に記述する必要があります)。
「ネットユーザー」を使用する方法がない場合は、
WMIC USERACCOUNT
いいですねただし、指定したグループ(Enterprise Admins、Domain Adminsなど)からも情報を取得する必要があります。
PowerShellを使用できることは知っていますが、CMD
の解決策を見つけようとしています。
バッチスクリプト内でPowerShellを使用して、cmdで必要なロジックを実行し、両方の長所を活かすことができます。 GroupName
変数の値をクエリする必要のあるグループに変更するだけで、期待どおりにcmdでそのグループのメンバーのリストが表示されるという簡単な例を以下に示します。
これをドメインコントローラーで実行していると言ったので、 Get-ADGroupMember を使用して、必要に応じてcmdを使用しながら、簡単にタスクを実行します。
注:-Recursive
スイッチを追加して、該当する場合は他のネストされたグループメンバーのメンバーを取得します。
@ECHO OFF
SET "GroupName=Domain Admins"
CALL :DynamicPSScriptBuild
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
PAUSE
EXIT /B
:DynamicPSScriptBuild
SET PSScript=%temp%\~tmp%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO Get-ADGroupMember -Identity "%GroupName%" ^| Select-Object Name>>"%PSScript%"
GOTO :EOF
出力例
さらに、クエリを実行するグループのグループメンバー以上のものを取得する必要がある場合は、その詳細を変数に保存し、その変数配列オブジェクトを ForEach-Object ループにパイプして、次に Get-ADUser を繰り返し、必要に応じてそこから特定のプロパティを引き出します。
@ECHO OFF
SET "GroupName=Domain Admins"
CALL :DynamicPSScriptBuild
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
PAUSE
EXIT /B
:DynamicPSScriptBuild
SET PSScript=%temp%\~tmp%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO $m = Get-ADGroupMember -Identity "domain admins" ^| Select-Object SamAccountName>>"%PSScript%"
ECHO $m ^| %% {Get-ADUser $_.SamAccountName -Properties * ^| Select SamAccountName, DisplayName, Description, accountExpires, ScriptPath, HomeDrive ^| fl }>>"%PSScript%"
GOTO :EOF
出力例
標準 エイリアス foreach-Object:
'%'
記号、ForEach
標準 エイリアス フォーマットリストの場合:
fl
net group WHATEVER
は、グループWHATEVER
のメンバーをリストします。
ローカルグループに相当するものはnet localgroup WHATEVER
。