2014-10-01 2 views
0

У меня есть сценарий powershell, который читается из файла csv и добавляет нового пользователя в AD. Моя проблема в том, что я хочу, чтобы удалить нового пользователя из файла csv, который я только что добавил из файла csv. Таким образом, новый пользователь не находится в файле csv enymore.Как удалить элемент в CSV-файле?

Import-Module ActiveDirectory 

# Import list of Users From CSV into $Userlist 
$userlist = Import-Csv "C:\employee.csv" 

# Step through Each Item in the List 
foreach($person in $userlist){ 

    $givenName = $person.givenName 
    Write-Output $givenName 

    $Initials = $person.Initials 
    Write-Output $Initials 

    $mail = $person.mail 
    Write-Output $mail 

    $title = $person.title 
    Write-Output $title 

    $displayName = $person.displayName 
    Write-Output $displayName 

    $sn = $person.sn 
    Write-Output $sn 

    $telephoneNumber = $person.telephoneNumber 
    Write-Output $telephoneNumber 

    $manager = $person.manager 
    Write-Output $manager 

    #Adding the new user to AD 
    New-ADUser $givenName -OtherAttributes @{givenName=$givenName;Initials=$Initials;mail=$mail;title=$title;displayName=$displayName;sn=$sn;telephoneNumber=$telephoneNumber;manager= 'CN='+$manager+',CN=Users,DC=jol,DC=local'} 


    #Delete item in csv file after adding the new user. 

} 
+0

Я готов угадать ответ от этого, но не будет ли полностью обработан csv-файл, и вы можете просто удалить весь файл? Я не вижу, что вы проверяете, существует ли пользователь, поэтому я должен предположить, что csv содержит всех новых пользователей? – Matt

+0

Да, этот файл содержит только новых пользователей. – user2996075

+5

Какова была бы цель удаления отдельных пользователей? В конце концов, вы получите пустой файл? – Matt

ответ

0

Как уже отмечалось @ Matt в комментариях к вопросу: если вы создаете все пользователи, перечисленные в файле и удалить каждого пользователя из файла после этого, ваш файл будет нормально быть пустым после того, как цикл завершается, так вы можете просто удалить файл.

Однако, если вы хотите сохранить записи, для создания учетной записи неудачные вы могли бы сделать что-то вроде этого:

foreach($person in $userlist){ 
    ... 
    New-ADUser $givenName -OtherAttributes @{...} -EA SilentlyContinue 
    if (-not $?) { $person | Export-Csv "C:\employee.csv" -NoType -Append } 
} 

Export-Csv Обратите внимание, что не поддерживает параметр -Append до начала PowerShell v3. Для более ранних версий вам понадобится ... | ConvertTo-Csv -NoType | Out-File "C:\employee.csv" -Append.

+1

Вы не имеете в виду 'if (! $?)'? – TheMadTechnician

+0

@ TheMadTechnician Действительно. Спасибо за головы. Исправлена. –

0

Как создать tmp-файл, если пользователь создан неправильно? Это потребует обработки ошибок, чтобы поймать пользователей, которые не были созданы правильно. Я предлагаю обернуть команду New-ADUser с помощью TRY/Catch.

#Before the foreach loop 
out-file -FilePath "C:\tmpEmployee.csv" -force 

    #Inside the loop - add the new user to AD using TRY/Catch for error handling 
    Try { 
     New-ADUser $givenName -OtherAttributes @{givenName=$givenName;Initials=$Initials;mail=$mail;title=$title;displayName=$displayName;sn=$sn;telephoneNumber=$telephoneNumber;manager= 'CN='+$manager+',CN=Users,DC=jol,DC=local'} 
    } 
    Catch {[Microsoft.ActiveDirectory.Management.Commands.NewADUser] 
     #additional error handling code 
     #export skipped user to tmpCSV File 
    } 

#After the foreach loop completes 

#Rename files 
Remove-Item -Path "C:\Employee.csv" -Force 
Rename-Item "C:\tmpEmployee.csv" -NewName "C:\Employee.csv" 

# 
1

В качестве альтернативы, если вы хотите, чтобы удалить их, как они созданы, вы можете сделать что-то вроде:

$ParsedCSV = $userlist 
ForEach($Person in $UserList){ 
    Blah, blah, code and stuff to add users 
    if($?){$ParsedCSV = $ParsedCSV | Where{$_ -ne $Person} 
    $ParsedCSV | Export-CSV 'C:\employee.csv' -notype -force} 
} 

Это удаляет пользователя из списка, как это сделано, и если команда, чтобы добавить пользователь работает, он удаляет этого человека из массива $ ParsedCSV и выводит его в файл CSV, перезаписывающий существующий. Учитывая скорость AD, я полагаю, что запись файлов и блокировка релиза должны происходить быстрее, чем создание учетной записи в большинстве, если не во всех случаях.

Смежные вопросы