【问题标题】:Powershell help multiple usersPowershell 帮助多个用户
【发布时间】:2020-02-21 12:17:51
【问题描述】:

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

Get-ADUser 12345678 -Properties extensionAttribute11 |选择 extensionAttribute11。

此脚本的作用是从 AD 中获取与 extensionattribute11 值相关联的数据,在我的情况下,该值恰好映射到用户卡,从该卡中我们得到一个十六进制数字,这意味着当学生扫描他们的卡通过读卡器,他们会被自动记入考勤登记册。

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

在我看来,这应该可以工作 Get-ADUser 12345678, 23456789, 12745423 -Properties extensionAttribute11 |选择extensionAttribute11,但显然这不是。

有没有人指点?我有点想自己解决这个问题,因为它可以尝试解决问题,但如果有人有现成的解决方案或类似的东西,那不会有什么坏处。

干杯

埃德

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    如果您可以创建一个 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 cmdlet 默认将返回具有以下属性的对象:DistinguishedNameEnabledGivenNameNameObjectClassObjectGUIDSamAccountName、@ 987654331@,SurnameUserPrincipalName。您需要使用-Properties 参数要求的所有额外属性。

    此外,如果您有一个搜索库 OU 来查找学生,您可以使代码更快。如果所有学生都在一个专用的 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
    

    如果所有学生都是 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
    

    【讨论】:

    • 你说的很有道理,所以我今天会研究一下。 AD 中有一个适用于所有用户的组,但是我需要识别的组将适用于大约 290 个用户,而不是所有用户。我可以做的一件事是从组中获取 CSV 并将详细信息与 AD 的详细信息相匹配。我会告诉你我的进展情况。
    • @Edmundo 如果您确实在一个 OU 或组中找到了所有学生帐户,那么事情会容易得多,您不必先创建中间 CSV 文件。为此,我添加了新代码。
    猜你喜欢
    • 2012-10-25
    • 2011-03-06
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多