Изменяя текущий код, вы можете попробовать следующее:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$username = $ADUser.SamAccountName # Doesn't seem to be needed
$source = Import-Csv -Path "C:\temp\Script\departments.csv" -Delimiter ';'
foreach($i in $source){
if($dep -eq $i.departmentNumber){
$i.departmentName
}
}
}
outputData
Все это предполагает, что первая строка вашего CSV-файла - DepartmentNumber;DepartmentName
.Кроме того, вы можете оставить CSV-файл без заголовков и добавить параметр -Header
в команду Import-Csv
следующим образом:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$source = Import-Csv -Path "C:\temp\Script\departments.csv" -Delimiter ';' -Header "DepartmentNumber","DepartmentName"
foreach($i in $source){
if($dep -eq $i.departmentNumber){
$i.departmentName
}
}
}
outputData
Все это предполагает, что атрибут Department
в AD содержит отделчисловое значение с целью поиска того же номера в файле CSV и возврата соответствующего названия отдела в той же строке.Ни один из этого кода не является эффективным, как он есть.Мы можем сделать это с меньшим количеством циклов.
Альтернатива без циклов и использование функции .where()
заключается в следующем:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$source = Import-Csv -Path "C:\temp\Script\departments.csv" -Delimiter ';' -Header "DepartmentNumber","DepartmentName"
$source.where({$_.departmentnumber -eq $dep},'First').departmentname
}
outputData
Другой альтернативой является использование преобразования строки в хеш-таблицу, напримеритак:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$source = (gc c:\temp\test1\test2.csv -raw) -replace ';','=' | ConvertFrom-StringData
$source[$dep]
}
outputData