2
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PowerShellで複数のcsvファイルを読み込み、ADユーザのOU移動と無効化を行う

Last updated at Posted at 2018-04-03

やりたいこと

  • 退職したADユーザーのOUを一括で移動
  • 退職したADユーザーを無効化
  • csvを読み込ませ、バッチでガツンと処理したい

インプット

  • csv形式で以下のようなログファイルが日次で出力されている
  • ファイル名は「ADlog.日付」
更新区分 ID 名前
1(新規)/2(変更)/3(削除) user001 テスト太郎

それでは順を追ってスクリプト作成の経緯を以下に記します。
※実際の環境から固有名詞などを書き換えているので、
 どこかタイポがあったらすみません。

まずはログファイルを1つのファイルにまとめる

  • カレントディレクトリの「logs」フォルダ内にログファイルが大量に吐き出されている想定

Get-Content .\logs\ADlog* > output.csv

まとまったcsvファイルを読み込む

Get-Content .\logs\ADlog* > output.csv
Import-Csv .\output.csv -Header 'FLG','ID','NAME'

更新区分が削除のものを抽出


$DelFLG = 3

Get-Content .\logs\ADlog* > output.csv
Import-Csv .\output.csv -Header 'FLG','ID','NAME' |  Where-Object {$_.FLG -eq $DelFLG }

Foreachで無効化・OU移動

$DelFLG = 3
$TargetOU = "OU=削除,DC=TESTAD,DC=local"

Get-Content .\logs\ADlog* > output.csv
Import-Csv .\output.csv -Header 'FLG','ID','NAME' |  Where-Object {$_.FLG -eq $DelFLG } | ForEach-Object {
    #無効化
    Set-ADUser -Identity $_.ID -Enabled $false
    
    #OU移動
    $UserDN = (Get-ADUser -Identity $_.ID).distinguishedName
    Move-ADObject -Identity $UserDN -TargetPath $TargetOU
}

ここまででだいたい実装できたものの、以下の懸念

  • 既に存在しないIDに対しての処理って気持ち悪くね?

既存ユーザー有無確認

以下をそのまま使わせてもらいました!
PowershellでActiveDirectoryのユーザーを管理する

$DelFLG = 3
$TargetOU = "OU=削除,DC=TESTAD,DC=local"

Get-Content .\logs\ADlog* > output.csv
Import-Csv .\output.csv -Header 'FLG','ID','NAME' |  Where-Object {$_.FLG -eq $DelFLG } | ForEach-Object {
    $existUser = $NULL
    $existUser = Get-ADUser -Identity $_.ID
    if ($existUser -eq $NULL)
        {
        #処理なし
        }
    else{
        #無効化
        Set-ADUser -Identity $_.ID -Enabled $false
    
        #OU移動
        $UserDN = (Get-ADUser -Identity $_.ID).distinguishedName
        Move-ADObject -Identity $UserDN -TargetPath $TargetOU
        }
}

もう一声!

  • デバッグ中、コンソールに出力される例外が多いと見づらくね?

完成

$DelFLG = 3
$TargetOU = "OU=削除,DC=TESTAD,DC=local"

Get-Content .\logs\ADlog* > output.csv
Import-Csv .\output.csv -Header 'FLG','ID','NAME' |  Where-Object {$_.FLG -eq $DelFLG } | ForEach-Object {
    # コンソールのエラーを非表示にする
    $ErrorActionPreference = "silentlycontinue"

    $existUser = $NULL
    $existUser = Get-ADUser -Identity $_.ID

    # コンソールのエラーを再表示する
    $ErrorActionPreference = "continue"

    if ($existUser -eq $NULL)
        {
        #処理なし
        }
    else{
        #無効化
        Set-ADUser -Identity $_.ID -Enabled $false
    
        #OU移動
        $UserDN = (Get-ADUser -Identity $_.ID).distinguishedName
        Move-ADObject -Identity $UserDN -TargetPath $TargetOU
        }
}

参考

PowerShell 関連~PowerShell でテキストデータを CSV として読み込んでデータベースっぽく操作するメモ~
move users to a new OU, getting information from .csv file.
PowershellでActiveDirectoryのユーザーを管理する
PowerShellコンソールエラーを非表示にする方法

2
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?