【发布时间】:2014-03-24 15:14:45
【问题描述】:
我有一个 CSV 文件,我将其视为主文件。并非 CSV 中的所有标题都是 AD 中用户的一部分。
主 CSV 具有以下字段:
Last NameFirst NameLast 4 SSNMonth of BirthDay of BirthCOMPANY Employee IDTitlesDepartment NamePhone Number
我需要将 CSV 中的 Company Employee ID 字段与 AD 中的 employeeNumber 属性进行比较。如果匹配,则应将以下字段写入新的 CSV:
Last NameFirst NameLast 4 SSNMonth of BirthDay of BirthCOMPANY Employee IDTitlesDepartment NamePhone NumberEmail Address
Last Name 和 First Name 来自 AD,Last 4 SSN、Month of Birth、Day of Birth 和 Phone Number 来自主 CSV 文件。
输出 CSV 中的COMPANY Employee ID、Titles、Department Name 和 Email Address 应分别采用 AD 属性 employeeNumber、title、department 和 mail 的值。
如果它们不匹配,则来自主 CSV 的记录需要成为具有上述相同标题的新 CSV 的一部分。
@Kobhrl:我无法在评论中添加整个代码。到目前为止,我有以下内容:
Function CheckAD
{
$MasterFile,$CSV,$AD = @()
DomainController = "companydc02.companycolo.pvt"
$companyUsersOU = "OU=company,DC=companycolo,DC=pvt"
$MasterFile = "C:\scripts\edir\edir_headers01.csv"
$CSVADMismatch = "C:\scripts\edir\edir_headers01_1.csv"
$CSV = Import-Csv $MasterFile
ForEach ($User in $CSV)
{
$ClockNumber = $User."company Employee ID"
Get-ADUser -SearchBase $companyUsersOU -Server $DomainController `
-Filter '(employeeNumber -eq $ClockNumber)' | ForEach-Object {
If ($User.$ClockNumber -eq $_.employeeNumber) {
write-host "Last Name " $_.surname
}
}
}
}
最新代码,但我卡住了:
Function CheckAD
{
$MasterFile,$CSV,$AD,$Output = @()
$DomainController = "companydc02.companycolo.pvt"
$companyUsersOU = "OU=company,DC=companycolo,DC=pvt"
$MasterFile = "C:\scripts\edir\edir_headers01.csv"
$CSVADMismatch = "C:\scripts\edir\edir_headers01_1.csv"
$CSV = Import-Csv $MasterFile
ForEach ($User in $CSV)
{
$ClockNumber = $User."company Employee ID"
#Get-ADUser -SearchBase $companyUsersOU -Server $DomainController -Filter '(employeeNumber -eq $ClockNumber)' -Properties * | `
#Get-ADUser -SearchBase $companyUsersOU -Server $DomainController -Filter '(employeeNumber -eq $ClockNumber)' -Properties * | Select Surname, givenName, employeeNumber, department, mail
Get-ADUser -SearchBase $companyUsersOU -Server $DomainController -Filter '(employeeNumber -eq $ClockNumber)' -Properties surname,givenName,employeeNumber,department,mail | `
# If ($AD)
# {
# $Output += New-Object PSObject -Property @{
# "Last Name"=$_.surname
# "First Name"=$_.givenName
# "Last 4 SSN"=$User."Last 4 SSN"
# }
# ForEach-Object {
# write-host "Last Name: " $_.surname
# write-host "First Name: " $_.givenName
# write-host "Last 4 SSN: " $User."Last 4 SSN"
# write-host "Month of Birth: " $User."Month of Birth"
# write-host "Day of Birth: " $User."Day of Birth"
# write-host "company Employee ID: " $_.employeeNumber
# write-host "Titles: " $User."Titles"
# write-host "Department Name: " $_.department
# write-host "Phone Number: " $User."Phone Number"
# write-host "Email Address: " $_.mail
# write-host ""
# }
#$Ad | Sort-Object -Property sn, givenName | Select SamAccountName,Surname,GivenName,Name,Department,Title,TelephoneNumber,EmployeeNumber | Export-Csv "c:\scripts\ceridian\06-10-2013_ExportedADUsersWithClockNumber.csv" -NoTypeInformation
Select @{n="Last Name";e={$_.surname}},@{n="First Name";e={$_.givenName}},@{n="Last 4 SSN";e={$User."Last 4 SSN"}},@{a="Month of Birth";b={$User."Month of Birth"}},@{c="Day of Birth";d={$User."Day of Birth"}},@{f="COMPANY Employee ID";g={$_.employeeNumber}},@{i="Titles";j={$User."Titles"}},@{k="Department Name";l={$_.department}},@{m="Phone Number";o={$User."Phone Number"}},@{p="Email Address";q={$_.mail}} | Export-CSV $CSVADMisMatch -NoTypeInformation
#}
}
#$Output | Sort "Last Name" | Export-CSV $CSVADMisMatch -NoTypeInformation
}
【问题讨论】:
-
这是一组很好的要求,但在 Stack Overflow 上,您应该已经尝试过解决方案,并且需要帮助来解决您遇到的问题。展示你迄今为止的作品。
标签: powershell csv powershell-3.0