输出部门和直接报告
我正在尝试创建一个“初始”文本文件,该文件将包含所有用户+部门+直接报告的脚本运行。创建该文件后的下一步是以相同的方式创建另一个文件,但将其与原始文件进行比较以查看用户的部门是否曾更改。 (还不确定如何比较部门价值)输出部门和直接报告
我目前的问题是,即使该过程与我过去所做的另一个程序相同,该部门也不会打印它。此外,当打印我的直接下属只会打印第一个与CN的整个延伸= ...,OU = ...等
我想它来打印这种方式:
username | Department(extensionAttribute14) | Direct Reports (as a single string)
we38432 | IT-Security | cm03456: 04555a: ....etc
我原来的脚本中使用此代码为部门:
$deps = Get-Aduser -filter {name -like *} -Properties name, extensionAttribute14 | Select name, extensionAttribute14 | Export-CSV $listing -notypeinformation
和这个工作。我尝试了{name -like *}
,但那给了我当前程序中的错误。我知道Export-CSV
使它工作,但我不能再使用这种格式。
的直接报告我原来是这样的:
foreach ($ID in $directReports){
if ($ID -ne $Null){
$directreports = get-aduser $ID
$directreports.name | Out-File $output -Append
}
此代码打印一行行的直接报告,但我想他们都在同一列Excel单元格时,我寄过去。
我已经打印了过去使用“:”所有成员的列表,它的工作原理,但直接报告列表并非如此。我刚从我的其他程序中使用这种格式时发生错误:
foreach ($member in $empty.members){
$string = $member.substring(3,$member.indexof(",")-3)
$members = $members + ":" + $string
}
我希望有人能帮我解决我的两个问题。
Import-Module ActiveDirectory
$documentOld = "C:\Temp\Old_Supervisor_list_mo_yyyy.txt"
Clear-Content $documentOld
$Header = `
"User ID" <#+ "|" + `
"Department" + "|" + `
"Direct Reports"#>
$Header | Out-File $documentOld -Append
$Users = Get-AdUser -Filter * -Properties name, Enabled, Manager, extensionAttribute14 | Select Enabled, name, Manager, extensionAttribute14
foreach ($user in $Users){
if ($user.enabled –eq $true) {
$name = $user.name
$directReports = Get-ADUser -Identity $name -Properties directreports | Select -ExpandProperty directreports
$department = $user.extensionAttribute14
foreach ($ID in $directReports){
if ($ID -ne $Null){
$directreports = get-aduser $ID
# $string = $directreports + ":"
}#end if $ID
}#end foreach $ID
$listing = `
$name + "|" + $deparment + "|" + $directreports#$string
$listing | Out-File $documentOld -Append
}# end if
}# end foreach $user
让我们来看看我们是否可以使这一点更容易和有效。
Import-Module ActiveDirectory
$documentOld = "C:\Temp\Old_Supervisor_list_mo_yyyy.txt"
$Users = Get-AdUser -Filter * -Properties name,Enabled,Manager,extensionAttribute14 | Where-Object{$_.Enabled}
$Users | ForEach-Object{
$props = @{
Name = $_.Name
Department = $_.extensionAttribute14
DirectReports = ($_.Manager | Where-Object{$_} | ForEach-Object{Get-Aduser $_ | Select-object -ExpandProperty Name}) -join ":"
}
New-Object -TypeName psobject -Property $props
} | Select-Object Name,Department,DirectReports | Export-CSV -Delimiter "|" -NoTypeInformation -Path $documentOld
首先,我们让所有的用户目录与Get-AdUser -Filter *
冒险,我们要规范以外的所有属性。由于您只是想要启用帐户,我们现在用Where-Object{$_.Enabled}
来过滤这些帐户。
有趣的部分是创建自定义对象数组(这是Export-CSV
的输入所必需的)。创建一个名为$props
的小哈希表,我们通过他们的友好名称设置属性。特殊的是DirectReports
,我们把所有的用户管理者DN(假设他们有一个是Where-Object{$_}
通过过滤空/空字符串所做的),并使用Get-Aduser
来得到那里的名字。由于您可以有多个管理器,因此最有可能返回数组,因此我们使用-join
确保只为DirectReports
属性提供单个字符串。该属性集合是为每个用户创建的,然后用于创建发送到输出流的New-Object
。
下面的Select-Object
只是为了确保创建的CSV列的顺序。当Export-CSV
和-Delimiter "|"
将为您辛苦工作时,无需制作大量Out-File
s的CSV文件。
这些字段代表什么? 'we38432 | IT-Security | cm03456:04555a:.... etc'。我可以假设一个是用户名,但我希望你告诉我确定。我问,因为你的直接报道不止一个人? – Matt 2015-03-02 17:32:02
IT安全是部门,是的大部分用户名都有一个以上的直接报告,如“”:“”@Matt – narue1992 2015-03-02 17:34:46
你知道你的PowerShell版本是什么吗? 'Get-Host' – Matt 2015-03-02 17:37:27