2016-09-13 10 views
1

foreignSecurityPrincipalオブジェクトをユーザー、コンピュータ、およびグループオブジェクトに解決しようとしています。私は、SecurityIdentifierクラスのtranslateメソッドを使ってSIDを 'NetBIOSName \ username'というNTAccount値に解決できることを発見しました。これは完全なドメイン名ではないという問題です。私はDNSRootの名前またはその他のいくつかのプロパティが必要です。ユーザーのdistinguishedNameやCanonicalNameなどからドメイン名を抽出できます。これを達成するために翻訳メソッドを使用する方法はありますか?または私が使うことができる他の方法?SecurityIdentifierクラスのtranslateメソッドを使用してドメイン名をSIDから検索する

(New-Object System.Security.Principal.SecurityIdentifier($Sid)).Translate([System.Security.Principal.NTAccount]) 

https://gallery.technet.microsoft.com/scriptcenter/Convert-Foreign-Security-1fdbaf46

答えて

2

Translate()方法はIdentityReferenceオブジェクトを返します。そのオブジェクトの唯一のプロパティー(Value)は、変換されたIDの文字列値を提供します。

(Get-ADDomain -Identity 'DOMAIN').DNSrootでも、あなたが探しているものが得られるかもしれません。


NetBIOSドメイン名は、あなたがこのような何かを試みることができる、あまりにも非特異的である場合:あなたのフォレストルートドメインのリストを取得します

  • を。
  • 各フォレストのドメインを列挙します。
  • 各ドメインSIDのdomain-specific partを抽出します。
  • SIDの部分とFQDNからハッシュテーブルを構築します。そのハッシュテーブルで
$forest = 'foo.example.org' 
$domains = @{} 
Get-ADForest $forest | 
    Select-Object -Expand Domains | 
    Get-ADDomain | 
    ForEach-Object { 
     $domains[($_.DomainSID.Value -replace '^S-\d+-\d+-')] = $_.DNSRoot 
    } 

あなたはそれらのユーザーのSIDでユーザードメインを検索することができるはずです。

$userdomain = $domains[($sid -replace '^S-\d+-\d+-(.*?)-\d+$', '$1')] 
+0

あなたは、これはPowerShellでどのように見えるかのためにsynatxを提供することはできますか? – duffney

+0

私はすでにそれをしました、私はしませんでしたか? –

+0

(New-Object System.Security.Principal.SecurityIdentifier($ Sid))。Translate() 私はあなたがこれを参照していたと仮定していますか?その引数セットに一致するコンストラクタがないため、()は機能しません。 PowerShellの中で.netを使うのはとても新しいことです。 – duffney

関連する問題