#powershell
#powershell
Вопрос:
Я запускаю приведенную ниже команду PS для csv-файла, который содержит список групп AD, за которыми следуют пользователи AD.
Скрипт работает нормально до тех пор, пока все поля заполнены, есть ли команда / переключатель, который игнорировал бы значение non как таковое?
import-csv c:adminpowershellADGroupMembers.csv | foreach {add-adgroupmember -Identity $_.ADGroup $_.member1,$_.member2,$_.member3,$_.member4,$_.member5}
Содержимое CSV-файла
ADGroup,Member1,Member2,Member3,Member4,Member5
AD-Test1,Minnie,Mickey,Donald,Daisy,Goofy
AD-Test2,Minnie,Mickey,Donald,,
AD-Test3,Minnie,Mickey,Donald,Pete,Spike
Ответ №1:
Проверьте, не имеет ли одно из свойств member * значения:
Import-Csv c:adminpowershellADGroupMembers.csv | Foreach-Object {
$values = $_.PSObject.Properties | Where-Object {$_.Name -clike "Member*" -and [string]::IsNullOrEmpty($_.Value) }
if($values)
{
Write-Warning 'missing values'
}
else
{
Add-ADGroupMember -Identity $_.ADGroup $_.member1,$_.member2,$_.member3,$_.member4,$_.member5
}
}
Ответ №2:
Я предполагаю, что вы также хотите добавить элементы строк, содержащих пропущенные значения (например, вы хотите добавить Минни, Микки и Дональда в AD-Test2). В этом случае я бы преобразовал наш csv-файл в коллекцию объектов с двумя свойствами: ADGroup (строка) и Members (строка[]). Тогда я бы передал эту коллекцию в add-groupmember.
Коллекция будет выглядеть примерно так:
<#
ADGroup Members
------- -------
AD-Test1 {Minnie, Mickey, Donald, Daisy...}
AD-Test2 {Minnie, Mickey, Donald}
AD-Test3 {Minnie, Mickey, Donald, Pete...}
#>
Как создать эту коллекцию:
# collection creation
$groupmembers = `
import-csv .ADGroupMembers.csv |
select AdGroup, @{
Name = "Members"
Expression = {
$members = @()
$_.psobject.properties |
Where-Object {$_.Name -clike "Member*" -and (-not [string]::IsNullOrEmpty($_.Value))} |
Foreach-Object {$members = $_.value}
$members
}
}
Передача коллекции в add-adgroupmember:
$groupmembers | %{Add-ADGroupMember -Identity $_.AdGroup -Members $_.members}