我正在尝试创建一个脚本,该脚本将检查用户名列表并显示用户的全名和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"
答案 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)
如有疑问,请阅读documentation。 Get-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
}