0

私は自分のパワーシェルの知識がかなり基本的です。とにかく、Get-ADComputer で識別名からの出力を変換するスクリプトを作成しようとしています。

通常、Get-ADComputer を使用してサーバーにクエリを実行した結果、OU の構造に応じて、distinguishedName は次のようになります。

CN=<servername>,OU=Others,OU=Servers,OU=0180,DC=win,DC=dom,DC=<something>,DC=com

私がやりたいことは、出力を 2 つの列に変換し、情報を再編成することです。これまでのところ、以下に示すように 2 つの列が並べ替えられたパーツを取得しました。

Name ParentContainer
------- ---------------
server1 OU=その他,OU=サーバー,OU=0180,DC=win,DC=dom,DC=,DC= com
server2 OU=DRA8,OU=Servers,OU=Admins,DC=win,DC=dom,DC=,DC=com
server3 OU=その他,OU=Servers,OU=0180,DC=win,DC=dom,DC =,DC=com
server4 OU=その他,OU=Servers,OU=0180,DC=win,DC=dom,DC=,DC=com
server5 OU=Servers,OU=4611,DC=win,DC=dom,DC =,DC=com

スクリプトは次のようになります。

$list = Get-Content "C:\temp\testservers.txt"
foreach ($servers in $list)
{
Get-ADcomputer "$servers" -Properties distinguishedName,cn | 
select name, @{n='ParentContainer';e={$_.distinguishedname -replace '^.+?,(CN|OU.+)','$1'}}
}

今、トリッキーな部分に。「ParentContainer」列で、すべての「DC=」値を削除してから OU を切り替えたいので、上記の代わりに以下のようになります。

名前 ParentContainer
------- ---------------
server1 OU=0180,OU=Servers,OU=その他
server2 OU=Admins,OU=Servers,OU=DRA8
server3 OU =0180,OU=サーバー,OU=その他
server4 OU=0180,OU=サーバー,OU=その他
server5 OU=4611,OU=サーバー

これは、OU 構造と、サーバーが CSV ファイルに配置した OU を確認しやすくするためです。

それは可能ですか、それとも私は深い水に出ていますか?

よろしく Torbjorn Persson

4

3 に答える 3

4

これを試してみてください。DN を分割すると、最初の要素がサーバー名になります。次に、範囲演算子を使用して、「dc=」で始まらない他のすべての要素を上から下に取得し、結合してから戻します。

Get-ADComputer -Filter * | ForEach-Object{

    $dn = $_.DistinguishedName.Split(',')

    New-Object PSObject -Property @{
        Name = $dn[0] -replace '^cn='
        ParentContainer = $dn[$dn.length..1] -notlike 'dc=*' -join ','
    }

}

ところで、CanonicalName 属性を確認することをお勧めします。DN を操作しなくても、同様の方法で目的の出力が得られる場合があります。

于 2013-11-13T11:48:38.900 に答える
0

別の可能性は次のとおりです。

Get-ADComputer -Filter * | ForEach-Object{  
  $split = ($dn -split 'CN=|,DC=.+').split(',',2) 
  New-Object PSObject -property @{
   Name=$split[1];ParentContainer=$split[2]}
}  
于 2013-11-13T13:10:02.997 に答える