2

ユーザーをレガシー システムから Active Directory に移行していて、AD グループに追加する必要があります。2 つのシステム間でユーザー名が一致しない (またはロジックがない!) ため、古いユーザー名と新しいユーザー名を含む csv を次の場所に取得しました。

入力.csv:

SamAccountName,LegacyUsername
ChristopherSpraggons,CSprag
JakeSquirrell,JakeSq
GeorgeCornish,CornishG

ルックアップを実行してユーザーをグループに追加するためにpowershellを作成しましたが、理想的には、手動で実行できるように、txtファイルと一致しないユーザーを報告する必要があります。私はこれを行う方法に完全に行き詰まっています。

これが私がこれまでに持っているものです:

$ImportCSV = C:\TEST.csv
Import-module ActiveDirectory 
$InputCSV=get-content $ImportCSV
$MatchedUsers = Import-CSV 'Input.csv' | Where{$InputCSV -match $_.LegacyUsername} | ForEach-Object {Add-ADGroupMember -Identity "ADGroupName" -Member $_.SamAccountName}

TEST.csv は、ヘッダーのない従来のユーザー名の単純なリストです。

4

2 に答える 2

2

ループの前に CSV データをフィルター処理しないでください。代わりに、条件をループ内に置き、一致しない名前を 2 番目の配列に追加します。

Import-Module ActiveDirectory

$legacyNames = Get-Content 'C:\TEST.csv'

$NonMatchedUsers = @()
$MatchedUsers = Import-CSV 'Input.csv' | % {
    if ( $legacyNames -contains $_.LegacyUsername ) {
      Add-ADGroupMember -Identity "ADGroupName" -Member $_.sAMAccountName
      $_.sAMAccountName
    } else {
      $NonMatchedUsers += $_.sAMAccountName
    }
  }

ただし、そもそも CSV ではないため、名前TEST.csvを のような名前に変更します。LegacyNames.txt

編集:実際の入力になりたいのでTEST.csv、少し異なるアプローチをお勧めします。Input.csvハッシュテーブル (辞書) に読み込みTEST.csv、パイプラインの入力を作成します。

Import-Module ActiveDirectory

$mapping = @{}
Import-Csv 'Input.csv' | % { $mapping[$_.LegacyUsername] = $_.sAMAccountName }

$NonMatchedUsers = Get-Content 'TEST.csv' | % {
    if ( $mapping.contains($_) ) {
      Add-ADGroupMember -Identity "ADGroupName" -Member $mapping[$_]
    } else {
      $_
    }
  }
于 2013-06-07T11:07:23.137 に答える
0

CSV にヘッダーがあると仮定すると、両方の CSV を手動で繰り返し列挙しなくても、PowerShell の配列メソッドを簡単に使用できるはずです。

$ImportCSV = C:\TEST.csv
Import-Module ActiveDirectory
$InputCSV = Get-Content $ImportCSV | `
 ForEach-Object {
if ($ImportCSV -notcontains $_.UserName) {
 $_ | Out-File C:\MissingNames.txt -Append
} }
于 2013-06-07T10:37:05.987 に答える