2017-11-07 38 views
0

私が言及したフィールドに値のスペースがあるADの小さな問題を修正したいと考えています。ADSIのlegacyExchangeDN値をPowerShellで置き換えます。

例:

legacyExchangeDN : /o= First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=6131a3a42ca946b98cc146345cfd0c2e-Ron E 

は次のようになります。

legacyExchangeDN : /o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=6131a3a42ca946b98cc146345cfd0c2e-Ron E 

これは、複数のユーザーに影響を与えると私は手動でADのアトリビュートエディタで値を更新することができますが、私はできることを期待していましたこれを自動化する。私はここで簡単に何かが欠けてるよう

Set-ADUser : Multiple values were specified for an attribute that can have only one value 
At line:1 char:1 
+ Set-ADUser reyer -Replace @{legacyExchangeDN="/o= ","/o="} 

それは感じているが、私はそれを見つけることができません。

#List all users to check existing values 

$ADUserList = Get-ADUser -Filter* -Properties * | fl name, EmailAddress, legacyExchangeDN 

#Replace value with space with value without space 

Set-ADUser reyer -Replace @{legacyExchangeDN="/o= ","/o="} 

2行目には、次のエラーを生成します。

は、ここで私がこれまで持っているものです。私は1人のユーザーでこれをテストしています。私は一度テストされた1つのスクリプトの残りのすべてのユーザーに対してこの値を置き換えたいと思います。フィールドにスペースがあるという基準に合ったユーザーだけを対象とすることができれば、それを保管したり配管したりするのに役立つはずです。

  • だけ交換してください---> "/ O =" のlegacyExchangeDNのテキスト値に存在するスペース(S)と

    1. 対象ユーザー:

      私の最終的な結果は次のようになります。 "/ o =最初の組織/ ou = Exchange管理グループ(FYDIBOHF23SPDLT)/ cn =受信者/ cn = 6131a3a42ca946b98cc146345cfd0c2e-Ron E"のテキスト値の残りの部分を保持しながら、 "/ o =

    あなたの時間と注意のための先進的なおかげで!

  • +0

    スワップ選択のためのFLをし、それが良い仕事しないかどうかを確認します。 – mjolinor

    答えて

    0
    $Users = Get-ADUser -Filter { legacyExchangeDN -like '*/o= *' } -Properties @('name','EmailAddress','legacyExchangeDN') 
    ForEach ($User in $Users) 
    { 
        $Replace = $User.legacyExchangeDN -replace '/o=\s','/o=' 
        Set-ADUser -Identity $User -Replace @{ legacyExchangeDN = $Replace } 
    
        Write-Host ('Updated "{0}" ({1}) to "{2}"' -f 
         @($User.name,$User.EmailAddress,$Replace)) 
    } 
    

    これは高速です。マントラは:左にフィルターをかけ、右にフォーマットする。 Set-ADUser takes an ADUser object-Replace[HashTable]になります(LDAPに表示されるように)名前付きプロパティに新しい値を割り当てます。

    (更新:foreachのために削除パイプライン)


    、ロギングを実装するとWrite-Hostを置き換えるために:

    'Updated "{0}" ({1}) to "{2}"' -f @($User.name,$User.EmailAddress,$Replace) | 
        Out-File -FilePath "$env:UserProfile\ADChanges.txt" -Append 
    
    +1

    @CharlieEcho '-Filter'は' -match'をサポートしていません。私はサポートされている操作に更新しました。 – TheIncorrigible1

    +0

    @CharlieEcho編集するのを忘れたという別の問題を修正しました。私の解決策は最新の編集で作業する必要があります。 – TheIncorrigible1

    +0

    あなたの現在のコードは、出力部分について私にアーギュメントエラーを吐きましたが、うまくいきました。 * Write-Host:パラメータ 'ForegroundColor'の引数がありません。 'System.ConsoleColor'タイプのパラメータを指定して、やり直してください。 行:7文字:47 +書き込みホスト '{0}' '{2}' '-f + ~~ +カテゴリ情報:InvalidArgument:(:) [ Host]、ParameterBindingException + FullyQualifiedErrorId:MissingArgument、Microsoft.PowerShell.Commands.WriteHostCommand * –

    関連する問題