Powershell поможет нескольким пользователям - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть простой скрипт, который выглядит следующим образом

Get-ADUser 12345678 -Properties extensionAttribute11 | Выберите extensionAttribute11.

То, что делает этот сценарий, - это получение от AD данных, связанных со значением extensionattribute11, которое в моем случае сопоставляется с карточкой пользователя, с этой карточки мы получаем шестнадцатеричное число, которое означает, что когда ученик сканирует свою карточку через устройство для чтения карточек, он автоматически регистрируется в регистре посещаемости.

Единственное, что я не могу сделать, - это заставить скрипт сделать это для группы пользователей. Я могу экспортировать список пользователей в файл CSV, но я не знаю, может ли это быть импортировано, или если это возможно, это будет работать. Кто-то предложил использовать массив, и хотя я знаю, что такое массив, мои знания о powershell минимальны.

В моей голове это должно работать Get-ADUser 12345678, 23456789, 12745423 -Properties extensionAttribute11 | Выберите extensionAttribute11, но, очевидно, это не так.

У кого-нибудь есть указатели? Я бы хотел взломать это сам, так как это хорошо, чтобы попытаться что-то решить, но если у кого-то есть готовое решение или что-то подобное, это не повредит.

Приветствия

Ed

1 Ответ

1 голос
/ 21 февраля 2020

Если вы можете создать CSV-файл с соответствующими пользовательскими данными от студентов, для которых вы хотите получить номера карт, что-то вроде этого:

"SamAccountName", "PossibleOtherData"
"jdoe", "something worth knowing"
"jtrump", "no. 1 snooker player"

Вы можете использовать это для следующее:

$users = Import-Csv -Path 'PathToYourCsvFile' | Select-Object -ExpandProperty SamAccountName
# or shorter: $users = (Import-Csv -Path 'PathToYourCsvFile').SamAccountName

$students = Get-ADUser -Filter "extensionAttribute11 -like '*'" -Properties DisplayName, extensionAttribute11 | 
    Where-Object { $users -contains $_.SamAccountName } |
    Select-Object DisplayName, @{Name = 'CardNumber'; Expression = { $_.extensionAttribute11}}

# display on screen
$students

# write to new CSV file
$students | Export-Csv -Path 'PathToYourOutputCsvFile' -UseCulture -Encoding UTF8 -NoTypeInformation

Стоит знать, что командлет Get-ADUser по умолчанию возвращает объекты со следующими свойствами: DistinguishedName, Enabled, GivenName, Name, ObjectClass, ObjectGUID, SamAccountName, SID, Surname, UserPrincipalName. Все дополнительные свойства, которые вы должны запросить, используя параметр -Properties.

Кроме того, вы можете сделать код быстрее, если у вас есть OU для поиска студентов. Если все студенты находятся в отдельном подразделении, вы можете добавить, например, этот -SearchBase "OU=Students,OU=UserAccounts,DC=YourCompany,DC=org" в командлет Get-ADUser


Если вы разместили всех своих студентов в выделенном подразделении или группе, должно быть не нужно сначала создавать файл CSV, а ниже следует это сделать:

В случае, если все ваши студенты могут быть найдены в одном и том же подразделении:

# put the DistinguishedName of the OU here
$ouDN     = "OU=Students,OU=UserAccounts,DC=YourCompany,DC=org"
$students = Get-ADUser -Filter "extensionAttribute11 -like '*'" -SearchBase $ouDN -Properties DisplayName, extensionAttribute11 | 
            Select-Object DisplayName, @{Name = 'CardNumber'; Expression = { $_.extensionAttribute11}}

# display on screen
$students

# write to new CSV file
$students | Export-Csv -Path 'PathToYourOutputCsvFile' -UseCulture -Encoding UTF8 -NoTypeInformation

Если все студенты являются членами AD группа, например, «Студенты», вы можете сделать:

$students = Get-ADGroupMember -Identity "Students" -Filter "objectClass -eq 'user'" | 
            Get-ADUser -Properties DisplayName, extensionAttribute11 | 
            Where-Object { $_.extensionAttribute11 -like '*' }
            Select-Object DisplayName, @{Name = 'CardNumber'; Expression = { $_.extensionAttribute11}}

# display on screen
$students

# write to new CSV file
$students | Export-Csv -Path 'PathToYourOutputCsvFile' -UseCulture -Encoding UTF8 -NoTypeInformation
...