Powershell帮助多个用户

Powershell帮助多个用户,powershell,active-directory,Powershell,Active Directory,我有一个简单的脚本,看起来像这样 获取ADUser 12345678-Properties ExtensionAttribute 11 |选择ExtensionAttribute 11 这个脚本的作用是从AD获取与extensionattribute11值相关的数据,在我的例子中,它恰好映射到用户卡,从该卡我们得到一个十六进制数,这意味着当学生在读卡器上扫描他们的卡时,他们会自动从考勤登记簿中提取 我不能做的一件事是让脚本为一组用户执行此操作。我可以将用户列表导出到CSV文件中,但我不知道该文件

我有一个简单的脚本,看起来像这样

获取ADUser 12345678-Properties ExtensionAttribute 11 |选择ExtensionAttribute 11

这个脚本的作用是从AD获取与extensionattribute11值相关的数据,在我的例子中,它恰好映射到用户卡,从该卡我们得到一个十六进制数,这意味着当学生在读卡器上扫描他们的卡时,他们会自动从考勤登记簿中提取

我不能做的一件事是让脚本为一组用户执行此操作。我可以将用户列表导出到CSV文件中,但我不知道该文件是否可以导入,或者是否可以,它是否可以工作。有人建议使用数组,虽然我知道数组是什么,但我对powershell的了解很少

在我看来,这应该是可行的,获得ADUser 12345678、23456789、12745423-Properties extensionAttribute11 | Select extensionAttribute11,但显然不是这样

有人有什么建议吗?我有点想自己破解这个问题,因为尝试解决问题是件好事,但如果有人有现成的解决方案或类似的东西,那也不会有什么坏处

干杯


Ed

如果您可以创建一个CSV文件,其中包含您想要获取其卡号的学生的相关用户数据,如下所示:

您可以使用它执行以下操作:

$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
cmdlet默认情况下将返回具有以下属性的对象:
discrimitedName
Enabled
GivenName
Name
ObjectClass
ObjectGUID
SamAccountName
SID
姓氏
UserPrincipalName
。使用
-properties
参数需要请求的所有额外属性

此外,如果你有一个搜索库来寻找学生,你可以使代码更快。如果所有学生都在专用OU中,您可以将此
-SearchBase“OU=students,OU=UserAccounts,DC=YourCompany,DC=org”
添加到
Get-ADUser
cmdlet中


如果您已将所有学生定位在一个专用的OU或组中,则无需首先创建CSV文件,并在下面创建:

如果您的所有学生都在同一个OU中:

# 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
如果所有学生都是广告组的成员,例如“学生”,您可以:

$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

你所说的很有道理,所以我今天将对此进行研究。广告中有一个面向所有用户的组,但是我需要确定的组将面向大约290个用户,而不是所有用户。我可以做的一件事是从一个组中获取CSV,并将详细信息与AD进行匹配。我会让你知道我的进展情况。@Edmundo如果你确实在一个OU或组中找到了所有学生帐户,事情会简单得多,你不必先创建一个中间CSV文件。为此,我添加了新代码。
$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