2017-06-13 19 views
1

信頼できる別のドメインのユーザーの完全修飾ドメイン名(FQDN)を取得するにはどうすればよいですか?対象ユーザーの(別の)ドメインのFQDNを取得する方法は?

通常、例えばアカウントは、私はできないのですプロキシアカウントです(私はhere(例えばwhoami /fqdnまたはecho %userDNSdomain%)概説アプローチのいずれかを取るように言ったユーザーを求めるだろうが、このアプローチは、何らかの理由で利用できない場合私が働いている会社は買収され、新しいオーナーは来るべきではないなど)、この異なるユーザーアカウントのFQDNを取得する方法はありますか?

また、ユーザーの資格情報によって返されるFQDNを「エミュレートする」アプローチを採用すると、エラーが発生しやすくなります。例えば、私のユーザーとしてwhoami /fqdnを実行しているの出力取る:

C:\Users\john.eisbrener>whoami /fqdn 
CN=John M. Eisbrener,OU=Standard Users,OU=Resources,DC=CONTOSO,DC=COM 

は私は概念的には同じ構造に従うことを期待して、他の、信頼されたドメインにドメイン・コンポーネントを調整することができますが、それは次のようになりますすべてのドメインが同じ命名規則に従っているわけではないので、近視眼的である。 .orgを使用している信頼できるドメインがあまりにも多く、またはLDAPルートパス内に追加のドメイン接頭辞または接尾辞を含むことが多く見受けられます。

この主なドライバは、特定のセキュリティグループに追加する必要のあるユーザーグループとユーザー名を見つけようとするときに、次のPowerShellクエリに適切なドメインコンポーネントを渡す必要があることです。ファイルパスなど

他のコンポーネントやモジュールをインストールできないのはなぜですか?ユーザーアカウントにソフトウェアをインストールするのに十分な特権がないため、私が使用しているコンピュータはかなりバニラで、余分なPowerShellモジュールやmmcスナップイン(e.f. dsa.msc)はありません。

この他のユーザーのドメインのFQDNを取得するために私の現在のアプローチは、セットアップにある実行しているWindowsスケジュールタスクとして前記ユーザ、テキストファイルに上記のwhoami /fqdnまたはecho %userDNSdomain%コマンドの出力を保存するが、これはそうビット場しのぎと私は、コマンドプロンプトまたはPowerShellプロンプトから実行できるシンプルなライナーを期待していました。任意の提案をいただければ幸いです。

私の用語が間違っているか混乱につながる場合は、最後の謝罪です。私は、私が求めていることを理解している誰かからこれに対する編集を開いています。

+1

RSSIからのADSIとActive Directoryモジュールは同じではありません。 ADSIはあなたが使いたいと思う方法です。 – BenH

+0

@BenH私のアカウントには、アクセス権を持っているマシンにソフトウェアをインストールするのに十分な権限がないため、このシナリオではこれらのツールを使用できません。 –

+0

次に、[adsisearcher]タイプのアクセラレータまたはSystem.DirectoryServices.DirectorySearcherクラスを使用して、シェルでネイティブに使用できるものを使用する必要があります。 – thepip3r

答えて

3

これはちょうどあなたのためにうまくいくはずです.Netクラスを使うべきです。すべての信頼されたドメインを取得して、それがユーザーに返し、その時点でユーザーを見つけるまで、各ドメイン内のユーザーをしようとしています

Function Get-TrustedDomainUser{ 
Param([String]$Alias) 
    $Forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest() 
    $AllTrusts=$Forest.GetAllTrustRelationships() 
    $Filter = "(&(sAMAccountName=$Alias)(objectClass=user))" 
    $Searcher = [adsisearcher]$Filter 
    ForEach($Domain in $AllTrusts.TargetName){ 
     Write-Host "Trying to find user in $Domain" 
     $LDAP = 'DC=' + ($Domain.split('.') -join ',DC=') 
     $Searcher.SearchRoot = "LDAP://$LDAP" 
     $ErrorActionPreference = 'Stop' 
     try{ 
      $DomUser = $Searcher.FindAll() 

     }Catch{ 
      Write-Host "User not found in $Domain" 
     } 
     If(!([string]::IsNullOrEmpty($DomUser.Path))){Break} 
    } 
    $DomUser 
} 

Get-TrustedDomainUser -Alias 'SomeUser' 

。オンスクリーンスパムが気に入らないのであれば、Write-Host行をコメントアウトしてください。

+0

'$ AllTrusts = $ ForestTargets = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts = $ ForestTrusts =ドメイン* EXCEPT *ソースドメイン。これらの追加ドメインを含めるには、すばやく簡単に –

1
$s = [adsisearcher]'(&(objectcategory=user)(samaccountname=somename))' 
$s.SearchRoot = [adsi]'LDAP://DomainFqdnOfTargetUserDomain' 
$r = $s.FindOne() 

$r.properties 
  • 我々は、デフォルトのユーザーのドメインを使用したくない指定するために基本となるたDirectorySearcherオブジェクト上
  • 使用特性を実行するLDAP検索が、ドメイン我々を指定するadsisearcherの型アクセラレータのコンストラクタを使用します指定する(ADSI参照でなければならない)。
  • distinguishednameは、返されるデフォルトのAD属性です。そうでない場合、またはデフォルトでないものを追加する必要がある場合は、次を使用できます。$s.PropertiesToLoad.Add('propertyname')
  • .FindOne()メソッドを実行して特異項目を返します。一般的な検索を行っている場合(例: (samaccountname = tom *)を.FindAll()に切り替えることができます。
  • 結果が画面に表示されるので、返されるオブジェクトのプロパティが表示されます。
  • いくつかの狂った理由から、これらの呼び出しはすべてのプロパティを配列として返します(ADスキーマでは単一値として定義されていても)ので、ほとんどの場合、プロパティを参照すると単一項目配列で機能します。インデックスでもそれを参照する方が適切でしょう:eg $r.properties.samaccountname[0]
+0

私はこのシナリオで '' LDAP:// DomainFqdnOfTargetUserDomain ''を調べようとしています。私の質問が何か他のものより混乱につながっている場合は申し訳ありません... –

+1

ターゲットユーザーのドメインのFQDNは何ですか?あなたのADドメインがsears.comでターゲットドメインがroebuck.comの場合は、コンピュータからスクリプトを実行するときに、 'DomainFqdnOfTargetUserDomain'をroebuck.comに置き換える必要があります。このプロパティはデフォルトのプロパティを持ち、スクリプトを実行しているプリンシパルのユーザーコンテキスト(つまり、ユーザーアカウントのドメイン)にデフォルト設定されています。別のドメインを検索するには、SearchRootプロパティを使用して別のドメインをターゲットにする必要があります。 – thepip3r

+0

ここでのシナリオは、誰もターゲットユーザーのドメインのFQDNを知っているわけではないので、それは私が把握しようとしているものです。 –

関連する問題