2017-02-17 13 views
0
  • ヒストリー:ユーザーのリストを含む定義済みのテーブルからユーザーを作成し、定義されたOrganizationalUnitに配置するためにPowershellスクリプトを作成しています。powershellでフィールドコンテンツを抽出する方法

  • 問題:スクリプトの終わりに、私は新しく作成したアカウントの私には

amoung無効つまたは複数のユーザーアカウントが存在するか否かを一覧表示するためにレポートをしたいのですがスクリプトでは、ユーザーごとにパスワードを入力する必要がありますが、Active Directoryで定義されているパスワードポリシーを満たさないパスワードを入力することがあります。この場合、アカウントは作成されますが無効になります。

dsquery user "ou=sp,dc=mydomain,dc=local" -disabled 

をし、それがこの私を印刷:続行するには

、私が試した

 
"CN=user1,OU=SP,DC=mydomain,DC=local" 
"CN=user2,OU=SP,DC=mydomain,DC=local" 
"CN=user3,OU=SP,DC=mydomain,DC=local" 
  • 私の目標:私は変数にCN」の値を抽出したいのですが"フィールドをスクリプト内のinital userテーブルと比較するために使用します。

    dsquery user "dc=mydomain,dc=local" -disabled | where-object {$_.CN -ne $null} 
    

または

dsquery user "dc=mydomain,dc=local" -disabled | where-object {$_.Common-Name -ne $null} 

しかし、それは(動作しない)助けにはなりませんでした。どうすればいいですか?

+0

この場合、ADコマンドレットにアクセスできませんか?あなたがdistinguishedNamesの解析を参照していないのであれば? dsqueryはPSObjectsを返さないため、そのように扱うことはできません。 – Matt

答えて

0

それはテストされていない - ちょうど "私の心から"

$csvData = Import-Csv 'UserList.csv' -Delimiter ';' -Encoding UTF8 
$userList = dsquery user "ou=sp,dc=mydomain,dc=local" -disabled 
$listOfDisabledAccounts = @() 
foreach ($user in $userList) 
{ 
    if ($csvData.Name -contains (($user -split ',')[0] -replace 'CN=','')) 
    { 
     $listOfDisabledAccounts += $csvData.Name 
    } 
} 

$listOfDisabledAccounts 
0

dsqueryは、PowerShellコマンドレットが、実行可能ではありません。これは、PowerShellオブジェクトをパイプラインに返さないことを意味します。 Kongsteadの方法は、文字列出力を返すことを知っているからです。 splitreplaceを使用して文字列を操作すると、目的に応じた出力が得られます。この情報を取得する他の2つの方法は、ADモジュール(デスクトップOSではRSAT)と.NetのADSIメソッドを使用することです。どちらも直接使用できるデータを返します。

ADコマンドレットが最も簡単です。無効なアカウントをすべて取得するには、次のようになります。

Search-ADAccount -AccountDisabled -SearchBase "dc=mydomain,dc=local" 
関連する問題