Powershell, CSV-импорт - PullRequest
       6

Powershell, CSV-импорт

0 голосов
/ 11 марта 2019

Я не очень опытен в работе с CSV-файлами, и теперь я застрял, пытаясь заставить этот небольшой частный проект работать должным образом.

Я создал скрипт, который проверяет, какой пользователь запускает скрипт, а затем получает номер отдела, к которому он принадлежит, из AD. Затем я хочу сравнить этот номер отдела с файлом CSV, чтобы получить правильное название отдела.

CSV-файл выглядит следующим образом:

111;DepartmentBlue
222;DepartmentRed
333;DepartmentGreen

Как я могу сделать так, чтобы мой скрипт проверял, существует ли в этом CSV-файле в столбце 1 этот номер отдела, полученный из AD, и затем возвращает название отдела (столбец 2)?

Вот что я получил:

Function outputData {
$outputUser.Text = ((Get-ADUser -Identity $env:username -Properties SamAccountName).SamAccountName)
$outputDep.Text = ((Get-ADUser -Identity $env:username -Properties Department).Department)

$dep = $outputDep.Text
$source = Import-Csv -Path "C:\temp\Script\departments.csv"
foreach($i in $source){
    if($dep -eq $i){
       #give me the department name
    }
}
}

1 Ответ

0 голосов
/ 11 марта 2019

Изменяя текущий код, вы можете попробовать следующее:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...