Powershell, проходите через CSV и используйте Switch - PullRequest
0 голосов
/ 27 августа 2018

Я настраиваю скрипт для автоматизации работы и у меня возникли проблемы. Я попробовал некоторые предложения, найденные в сети, но безуспешно.

Моя цель - циклически просматривать файл CSV в каждой строке, проверять определенную ячейку на предмет ее содержимого и затем запускать команду на основе этого значения со всеми данными в этой строке.

Вот что у меня сейчас. Это не работает, и я, честно говоря, не уверен, что у меня даже есть правильный синтаксис для пошагового выполнения каждой строки, или если переключатель даже настроен на чтение заголовка «Описание» и сравнение его со случаями ниже.

Import-Csv $path | Foreach-Object {

foreach ($property in $_.PSObject.Properties){
    switch ($property.description) {
        2019 {
            do something
        }
        2020 {
            do something
        }
        2021 {
            do something
        }
        2022 {
            do something
        }
    }
}
}

Образец CSV

firstname,lastname,name,samaccountname,password,email,description,CAMPUS_ID
1test,1senior,1test 1senior,01testsenior,test1234,01testsenior@website.com,2019,1
1test,1junior,1test 1junior,01testjunior,test1234,01testjunior@website.com,2020,1
1test,1sophomore,1test 1sophomore,01testsophomore,test1234,01testsophomore@website.com,2021,1
1test,1freshman,1test 1freshman,01testfreshman,test1234,01testfreshman@website.com,2022,1

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Внутренний цикл не нужен, просто укажите свойство description текущего элемента в конвейере ($_):

Import-Csv $path | Foreach-Object {
    switch ($_.description) {
        2019 {
            do something
        }
        2020 {
            do something
        }
        2021 {
            do something
        }
        2022 {
            do something
        }
    }
}
0 голосов
/ 27 августа 2018

Спасибо всем за помощь! В итоге я соединил то, что написал, и исправил Матиас, и то, что написал Вивек. С некоторыми дополнительными изменениями для сохранения строки в переменных, поскольку они не передаются в переключатели.

Import-Csv 'PATH' | Foreach-Object {

$FirstName = $_.firstname
$LastName = $_.lastname
$Email = $_.email
$Password = $_.password
$Description = $_.description
$Campus = $_.CAMPUS_ID

    switch ($_.description) {
        '2019' {Do something with variables}
        '2020' {Do something with variables}
        '2021' {Do something with variables}
        '2022' {Do something with variables}
        default {echo "Default"}
    }
}
0 голосов
/ 27 августа 2018

Попробуйте это -

$obj = Import-Csv $path
switch($obj.PSObject.Properties.Value.Description)
{
    '2019' {'do 2019 thing'}
    '2020' {'do 2020 thing'}
    '2021' {'do 2021 thing'}
    '2021' {'do 2022 thing'}
    default {'do default thing'}
}
...