2

私はAD抽出を行っており、フィールド「識別名」をソートしています。ユーザー自体の「親OU」を表す値の特定の部分のみを保持したいと考えています。

このコマンドを実行して、すべてのユーザーの追加抽出を行います。

import-module activedirectory
get-aduser -filter * -properties *| Select-Object -Property SamAccountName,CN,co,ExtensionAttribute10,extensionAttribute11,extensionAttribute12,EmailAddress,whenCreated,Enabled,LastLogonDate,accountexpirationdate,distinguishedname  |Sort-Object -Property Name | Export-Csv -Delimiter ";" -path "u:\theOutFile_NOFILTER_July.txt"

列は次の"distinguishedname"ようになります。

distinguishedname
CN=familly\, user,OU=Remote Users,OU=New York,OU=My,DC=Company,DC=Local
CN=nameless\, cat,OU=Remote Users,OU=Ottawa,OU=My,DC=Company,DC=Local
CN=Cameron\, James,OU=Regular Users,OU=Hollywood,OU=My,DC=Company,DC=Local
CN=Bon\, Jean,OU=regular Users,OU=Springfield,OU=My,DC=Company,DC=Local

7 月 10 日 、いつかこれらの行にヒットすることに注意してください。

CN=Dog\, Cesar,OU=Special Accounts,OU=Regular Users,OU=Alma,OU=My,DC=Company,DC=Local
CN=keys\, Alicia,OU=Special Accounts,OU=Regular Users,OU=Paris,OU=My,DC=Company,DC=Local
CN=Clansy\, Door,OU=Map Drives,OU=Remote Users,OU=Rome,OU=My,DC=Company,DC=Local

その場合、市の代わりにそのようRemote Usersな結果が得られます。Regular Users私はあなたが与えたあなたのコマンドでいくつかの変更を試みましたが、無駄でした.

しかし、代わりに最初のコマンドでこの結果を返すようにしたいと思います。

distinguishedname
New York
Ottawa
Hollywood
Springfield

方法を見つける努力ができません。

前もって感謝します

4

1 に答える 1

2

Select-Object には、プロパティ名の代わりにハッシュを使用して計算されたプロパティを作成するための非常に用途の広い機能があり、キー "Name" は計算されたプロパティの名前 (事実上、列見出し) に設定され、"Expression" は "式" に設定されます。パイプライン内のオブジェクトごとに、プロパティの値を決定するコード ブロックに設定されます。これはあなたが望むことをします:

Get-Aduser -Filter * -Properties * | Select-Object -Property SamAccountName,CN,co,ExtensionAttribute10,extensionAttribute11,extensionAttribute12,EmailAddress,whenCreated,Enabled,LastLogonDate,accountexpirationdate,@{Name='distinguishedname'; Expression={[regex]::match($_.distinguishedname,'OU=.+?OU=(.+?),(OU|DC)=').Groups[1].Value}} | Sort-Object -Property Name | Export-Csv -Delimiter ";" -Path "u:\theOutFile_NOFILTER_July.txt"

ここに何が起こっているかの内訳があります:

  • Name='distinguishedname'「識別名」という新しい列を作成するように指示します。探している出力の例と一致するようにその名前を使用しましたが、既存のプロパティの名前である必要はありません。名前を、計算している値をより説明するものに変更する方がおそらく意味があるでしょうName="parentOU"
  • [regex]::matchは、正規表現を使用して$_.distinguishednameから目的の部分を抽出するために使用されOU=.+?OU=(.+?),(OU|DC)=、一致グループを使用してリスト内の 2 番目の OU の名前を分離します。
  • .Groups[1].Value最初の一致グループ (最初の括弧のセットの内容に一致する部分) の値を返します。.Groups[1]なしで.Valueを単独で使用すると、最初のOU=から親 OU の名前に続く=まで、一致した文字列全体が返されます。以下は、一致グループの代わりに幅ゼロのアサーションを使用して、同様に機能します。[regex]::match($_.distinguishedname,'(?<=OU=.+?OU=).+?(?=,(OU|DC)=)').Value
于 2013-07-09T18:57:02.300 に答える