トップ回答者
一般アカウントでドメイン参加させたコンピュータの件数確認

質問
-
お世話になります。
一般権限のドメインアカウント(「Authenticated Users」グループに所属するユーザーアカウント)で、コンピュータをドメイン参加させているのですが、そのユーザーで現時点で何台のコンピュータをドメイン参加させているかを確認する方法が分かりません。
初期状態で1ユーザーアカウントあたり10コンピューターまでという制限を無制限にすれば良いかもしれませんが、どちらにせよ前述のコンピュータ数を確認する方法を確立しておきたいと思っています。
「ADSI Edit」など試してみましたが、どれもいまいちで、結局VBScriptにて作りこみをしている最中ですが以下の問題が発生しました。
・GetObjectメソッド利用してコンピュータアカウントの「mS-DS-CreatorSID」の値を抽出し、ユーザーのSIDとマッチングしてカウントを試みましたが、「mS-DS-CreatorSID」はバイナリ値として取得されてしまい、ユーザーSIDの文字列との比較ができません。
以下のサイトを見ると、「mS-DS-CreatorSID」は「String」と表記されているのですが、バイナリ値で取得されてしまいます。。。
https://docs.oracle.com/cd/E19225-01/821-0779/bzafh/index.html
コードは以下の内容しか書いていないのですが。
set objUser = GetObject("LDAP://<DN名>") strA = objUser.Get("mS-DS-CreatorSID")
【環境】
Windows Server 2012 R2
※VBSはサーバ上で実行しています。
どなたか、解決方法をご教示いただけると幸いです。
【追加情報】
以下のコマンドをADサーバーのコマンドプロンプトで実行すると、16進表記で表示されました。
dsquery * "<DN名>" -attr * mS-DS-CreatorSID: 0x01 0x05 0x00 0x00 0x00 0x00 0x00 0x05 0x15 0x00 0x00 0x00 0x8d 0x0a 0x14 0x04 0x98 0x02 0xa0 0x21 0x5b 0xbb 0xb6 0x94 0xd2 0x04 0x00 0x00
- 編集済み mu_seed 2019年2月15日 8:17
回答
-
チャブーンです。
この件ですが、やはり調べた方はいるようで、答えはしたのページに書いてありますね。
要するに変換しないとダメなのですが、変換には、新たに"New-Object System.Security.Principal.SecurityIdentifier"を定義する必要があります。動くかどうか、わかりませんが、したのようなコードになると思います。これですが、PowerShellを使うと.SIDプロパティで値を変換してくれますので、とくに変換式は不要です。簡単に検証した結果を、コーディングしておきます。
[Microsoft.ActiveDirectory.Management.ADAccount[]]$Computers=Get-ADComputer -Filter {ms-DS-CreatorSID -like "*"} -Properties ms-DS-CreatorSID | Where {$_."mS-DS-CreatorSID".Value -eq (Get-ADUser <ユーザー名>).Sid.Value}
Write-Host ユーザーが参加させたコンピューター数は、以下の ($Computers).Count 台です。
$Computers
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2019年2月15日 12:35 コード、内容の変更
- 回答としてマーク mu_seed 2019年2月18日 23:58
-
チャブーンです。
ご要望の機能は、以下のPowerShellでうまくいきそうです。ActiveDirectoryモジュールを入れられない環境ではSystem.DirectoryServices.DirectorySearcherから検索を行えばよいでしょう。
$User=[System.Security.Principal.WindowsIdentity]::GetCurrent() $UserSID=$User.User.Value $UserName=$User.name [Object[]]$Computers=(New-Object DirectoryServices.DirectorySearcher "(&(ObjectClass=computer)(ms-DS-CreatorSID=$UserSID))").FindAll() | Select @{Name="Name";Expression={$_.properties.name}},Path Write-Host ユーザー $UserName が参加させたコンピューター数は、以下の ($Computers).Count 台です。 $Computers | FT -AutoSize
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2019年2月18日 10:03
- 回答としてマーク mu_seed 2019年2月18日 23:58
すべての返信
-
チャブーンです。
この件ですが、やはり調べた方はいるようで、答えはしたのページに書いてありますね。
要するに変換しないとダメなのですが、変換には、新たに"New-Object System.Security.Principal.SecurityIdentifier"を定義する必要があります。動くかどうか、わかりませんが、したのようなコードになると思います。これですが、PowerShellを使うと.SIDプロパティで値を変換してくれますので、とくに変換式は不要です。簡単に検証した結果を、コーディングしておきます。
[Microsoft.ActiveDirectory.Management.ADAccount[]]$Computers=Get-ADComputer -Filter {ms-DS-CreatorSID -like "*"} -Properties ms-DS-CreatorSID | Where {$_."mS-DS-CreatorSID".Value -eq (Get-ADUser <ユーザー名>).Sid.Value}
Write-Host ユーザーが参加させたコンピューター数は、以下の ($Computers).Count 台です。
$Computers
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2019年2月15日 12:35 コード、内容の変更
- 回答としてマーク mu_seed 2019年2月18日 23:58
-
チャブーン様
いつもお世話になっております。
ご回答ありがとうございます。
PowerShellは完全に眼中になかったです、新しい発想をありがとうございます。
記載していただいたコードが手元の環境でも、期待している結果を返してくれるところまで確認できました。
あと欲を言えば、現在ADサーバ上で台数のカウントをしていますが、これがドメイン参加している端末でかつ、参加に利用したユーザーアカウントの権限で確認が出来るとさらにうれしいのですが、そこの仕組みはこれから検討してみたいと思います。
(ユーザー自身がどの端末にドメイン参加したのかを、いつでも確認できれば、10台という制限を意識しやすくなるかなと考えています。)
-
チャブーンです。
ご要望の機能は、以下のPowerShellでうまくいきそうです。ActiveDirectoryモジュールを入れられない環境ではSystem.DirectoryServices.DirectorySearcherから検索を行えばよいでしょう。
$User=[System.Security.Principal.WindowsIdentity]::GetCurrent() $UserSID=$User.User.Value $UserName=$User.name [Object[]]$Computers=(New-Object DirectoryServices.DirectorySearcher "(&(ObjectClass=computer)(ms-DS-CreatorSID=$UserSID))").FindAll() | Select @{Name="Name";Expression={$_.properties.name}},Path Write-Host ユーザー $UserName が参加させたコンピューター数は、以下の ($Computers).Count 台です。 $Computers | FT -AutoSize
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2019年2月18日 10:03
- 回答としてマーク mu_seed 2019年2月18日 23:58