从用户名

时间:2017-03-13 15:39:52

标签: powershell csv active-directory

我正在尝试创建一个脚本,该脚本将检查用户名列表并显示用户的全名和AD中的一些属性设置。基本上我已经发送了一个用户名列表,这些用户名只是数字,管理层希望知道每个用户名的用户全名。他们也想知道他们想要的分工。

以下是我创建的不起作用的脚本。

$csv = Import-Csv "C:\temp\users.csv"

foreach ($user in $csv) {
    $name = $user.myid
    Get-ADUser -Filter {EmployeeID -eq $name} -Properties * |
        Get-ADUser -Division $user.Programme
} | Export-Csv "C:\Temp\Results.csv"

3 个答案:

答案 0 :(得分:1)

所以我假设你的csv文件中有一个名为myid的列,其中包含你需要查找的id。假设情况确实如此,您需要在此处进行一些更改。您需要删除第二个get-aduser,因为它实际上并没有为您做任何事情,如果您需要限制结果,-division cmdlet没有get-aduser开关可用只需几个设置即可使用-properties开关和管道进行选择,如下所示。请记住,如果用户没有" employeeid"和"分裂"在他们的AD帐户上设置的属性,这在我的经验中是相当罕见的,但如果您的公司在创建帐户时作为政策问题应该没问题。如果您将脚本中的get-aduser行替换为此行,则应该获取具有与您的电子表格中的EmployeeID属性相匹配的Get-ADUser -Filter {EmployeeID -eq $name} -Properties "displayname","division","employeeid" | Select-Object "employeeid","displayname","division" 属性的任何用户的帐户,然后输出该人的全名, division和employeeid到您的CSV文件。

<hibernate-configuration>
<session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">org.mm.mysql.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306</property>
    <property name="connection_userid">user</property>
    <property name="connection_pwd">pass</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection_pool_size">true</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.MySQLDialect</property>

    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">1</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbmdl.auto">update</property>

    <!-- Names the annotated entity class -->
    <mapping class="com.test.springboot.model.AdultParticipant" />

</session-factory>

答案 1 :(得分:0)

如有疑问,请阅读documentationGet-ADUser没有参数-Division。您需要select输出文件中所需的属性。另外,foreach loops don't pass output into the pipeline。如果要将输出直接传递到ForEach-Object

,则需要Export-Csv循环
Import-Csv 'C:\temp\users.csv' |
    ForEach-Object {
        $name = $_.myid
        Get-ADUser -Filter "EmployeeID -eq $name" -Properties *
    } |
    Select-Object SamAccountName, DisplayName, Division |
    Export-Csv 'C:\Temp\Results.csv' -NoType

否则你需要在变量中收集输出:

$users = foreach ($user in $csv) {
    $name = $user.myid
    Get-ADUser -Filter "EmployeeID -eq $name" -Properties *
}
$users | Export-Csv 'C:\Temp\Results.csv' -NoType

或在subexpression中运行循环:

$(foreach ($user in $csv) {
    $name = $user.myid
    Get-ADUser -Filter "EmployeeID -eq $name" -Properties *
}) | Export-Csv 'C:\Temp\Results.csv' -NoType

答案 2 :(得分:0)

这是一个通用的代码结构,可以根据您的场景进行调整,以适应CSV文件的数据收集/枚举和生成。我们在工作场所使用类似的东西它包含一些错误处理 - 您想要的最后一件事是CSV文件中的结果不准确。

# Create an array from a data source:
$dataArray = import-csv "C:\temp\users.csv"

# Create an array to store results of foreach loop:
$arrayOfHashtables = @()

# Loop the data array, doing additional work to create our custom data for the CSV file:
foreach($item in $dataArray)
{
    try
    {
        $ADObject = Get-ADUser -Filter { EmployeeID -eq $item.MyID } -Properties DisplayName,Division -ErrorAction Stop
    }
    catch
    {
        Write-Output "$($item.MyID): Error looking up this ID. Error was $($Error[0].Exception.Message)"
    }

    if($ADObject)
    {
        # Create a hashtable to store information about a single item:
        $hashTable = [ordered]@{
            EmployeeID=$item.myID
            DisplayName=$ADObject.DisplayName
        }

        # Add the hashtable into the results array:
        $arrayOfHashtables += (New-Object -TypeName PSObject -Property $hashTable)
    }
    else
    {
        Write-Output "$($item.MyID): No result found for this ID."
    }
}

# If the results array was populated, export it:
if($arrayOfHashtables.Count -gt 0)
{
    $arrayOfHashtables | Export-CSV -Path "C:\Temp\Results.csv" -Confirm:$false -NoTypeInformation
}

如其他地方所述,除法不是AD对象的属性,因此您可能需要在其他位置查找此数据。如果您可以在foreach循环中使用另一行PowerShell执行此操作,则可以将其添加到哈希表对象中,如下所示:

$hashTable = [ordered]@{
    EmployeeID=$item.myID
    DisplayName=$ADObject.DisplayName
    Division=$DivisionFromOtherSource
}