1

この質問は、サービスが Active Directory にアクセスできるように、DC サーバー上で実行されている (またはリモートで DC にアクセスしている) サービスのコンテキストにありますが、サービスは Active Directory サーバーを認識していません。サーバーのアドレスなど...

さらに、サービスは、Active Directory のセットアップにフェデレーション サーバーのグループが関与する可能性があることを前提として作成する必要があります。

例として問題を説明するには -

すべての ADUsers を取得するために、Powershell v2 (またはディレクトリ サービスを使用できます) を介して非常に単純な AD クエリを実行しようとしているとします。

$users = Get-ADUser

ここで、例として Contoso という会社がニューヨーク (NY オフィス用) に AD サーバーを持ち、シアトル (シアトル オフィス用) に AD サーバーを持っているとします。また、サービスは NY データセンターのサーバーとなる DC を指します。

簡単にするために、$users が次の表示名属性を持つ 2 つのユーザー オブジェクトを返すとします。

ダン・ジャンプ ジム・ウィルソン

ここで、シアトルのサーバーがダウンしていると仮定して、もう一度クエリを実行すると、次の結果が得られます。

ダンジャンプ

私が理解していることから-ADはシアトルサーバーがダウンしていることを示すエラーを返しません..見つけることができるユーザーを返すだけです..

削除されたオブジェクトを検出できることはわかっているので、すべてのユーザーのリストを保存した場合、ユーザーが削除されたことを確認できる可能性があります...しかし、特にリスト以上のものに興味がある場合は、少しオーバーヘッドがかかりますユーザーの

クエリを実行する前に、連合クラスター内の 1 つ以上の AD サーバーがダウンしていることを検出する方法はありますか?

4

2 に答える 2

1

以下のいずれかを使用する前に、このをお読みください。S.DS と S.DS.AD は、発生する多くのことを抽象化しますが、そこには多くの有用な情報があり、要件を明確にするのに役立つ場合があります。

ダウンしている DC を返す関数があることは知りませんが、System.DirectoryServices.ActiveDirectory名前空間には、ドメイン トポロジを決定するために必要なクラスが含まれています。たとえば、ForestクラスはDomainオブジェクト (およびSiteやその他の多くの有用なプロパティ) のコレクションを返します。 ドメインは、 DomainControllerオブジェクトのコレクションへのアクセスを提供します (ドメインと親ドメイン、およびその他の多くの小道具とメソッドも同様です)。

ドメインを繰り返し処理してすべての DC を取得してから、DC を繰り返し処理して ping を試行することもできますが、これは十分にセキュリティで保護され、セグメント化されたネットワークでは機能しない場合があります。どのシナリオでも、DC から S.DS.DirectoryEntry を使用して各 DC に接続することを検討してください。もちろん、ネットワーク担当者がロックダウンに熱心すぎる場合は、それでもうまくいかない可能性があります.

于 2012-12-28T09:13:40.360 に答える
0

これはwww.serverfault.comの素晴らしい人々の仕事のように聞こえます

これがプログラマー固有のものかわかりませんか?ネットワークのトラブルシューティングのように聞こえますか?いずれかの方法...

IMO、フェデレーションサーバーが配置されている場所によって異なります。彼らはクラウドにいますか?それらは仮想ですか?その場合、サーバープラットフォームへの単純なAPI呼び出しを通じて、それらがダウンしたことを簡単に検出できます。

または、このWebサイトの例のように、サーバーのpingメカニズムの実装を試みることもできます

$servers = Get-Content 'servers.txt'
ForEach-Object ($server in $servers) {
   # Ping the machine to see if it's on the network
   $results = Get-WMIObject -query "select StatusCode from
Win32_PingStatus where Address = '$server'"
   $responds = $false  
   ForEach-Object ($result in $results) {
      # If the machine responds break out of the result loop and indicate success
      if ($result.statuscode -eq 0) {
         $responds = $true
         break
      }
   }
         If ($responds) {
      # Gather info from the server because it responds
      Write-Output "$server responds"
   } else {
      # Let the user know we couldn't connect to the server
      Write-Output "$server does not respond"
   }
}

**これは、サーバーが「ping可能」であることを前提としています。

ここでMSTechnetにあるAD-GetComputerコマンドレットを利用することもできます。

Get-ADComputerコマンドレットは、コンピューターを取得するか、検索を実行して複数のコンピューターを取得します。

Identityパラメーターは、取得するActiveDirectoryコンピューターを指定します。コンピューターは、識別名(DN)、GUID、セキュリティID(SID)、またはセキュリティアカウントマネージャー(SAM)のアカウント名で識別できます。また、パラメーターを$などのコンピューターオブジェクト変数に設定したり、コンピューターオブジェクトをパイプラインを介してIdentityパラメーターに渡したりすることもできます。

複数のコンピューターを検索して取得するには、FilterまたはLDAPFilterパラメーターを使用します。Filterパラメーターは、PowerShell式言語を使用してActiveDirectoryのクエリ文字列を記述します。PowerShell式言語構文は、Filterパラメーターによって受信された値型のリッチ型変換サポートを提供します。Filterパラメーター構文の詳細については、about_ActiveDirectory_Filterを参照してください。既存のLDAPクエリ文字列がある場合は、LDAPFilterパラメーターを使用できます。

このコマンドレットは、コンピューターオブジェクトプロパティのデフォルトセットを取得します。追加のプロパティを取得するには、Propertiesパラメーターを使用します。コンピュータオブジェクトのプロパティを決定する方法の詳細については、プロパティパラメータの説明を参照してください。

于 2012-11-13T17:37:57.147 に答える