Я новичок в написании сценариев и борюсь с реализацией некоторых концепций. У меня работает скрипт PowerShell, который будет принимать ввод от пользователя и сохранять его в нескольких переменных. Затем он просматривает файл .csv и выводит только те строки, в которых несколько входных данных пользователя не совпадают со значением в указанном столбце.
Например, если у меня есть файл .csv, содержащий:
value1, value2, value3
data1, data2, data3
data1, data2, data3
data1, data5, data3
data1, data2, data3
И я прошу вывести строки, в которых значение2 отличается от data5, в качестве вывода я получаю следующее:
value1, value2, value3
data1, data2, data3
data1, data2, data3
data1, data2, data3
Вот мой текущий код, который работает:
$path = Read-Host 'What is the file share path?'
$filteredvalue = Read-Host 'What value would you like to filter out?'
$filteredvalue2 = Read-Host 'What second value would you like to filter out?'
$filteredvalue3 = Read-Host 'What second value would you like to filter out?'
$filteredvalue4 = Read-Host 'What second value would you like to filter out?'
$filteredvalue5 = Read-Host 'What second value would you like to filter out?'
$filteredvalue6 = Read-Host 'What second value would you like to filter out?'
$filteredvalue7 = Read-Host 'What second value would you like to filter out?'
$file1 = $path
$filtered = Import-Csv -Path $file1 | where {$_.IdentityReference -notlike $filteredvalue -and $_.IdentityReference -notlike $filteredvalue2 -and $_.IdentityReference -notlike $filteredvalue3 -and $_.IdentityReference -notlike $filteredvalue4 -and $_.IdentityReference -notlike $filteredvalue5 -and $_.IdentityReference -notlike $filteredvalue6 -and $_.IdentityReference -notlike $filteredvalue7}
$file2 = "${path}_filtered.csv"
$filtered | Export-Csv -Path $file2 -NoTypeInformation
Это работает, но это не лучшее решение, так как я должен указать в коде, сколько значений я буду отфильтровывать. Я хотел бы использовать массивы, чтобы не создавать все переменные для значений.
Вот что я пробовал до сих пор, но не повезло:
$path = Read-Host 'What is the file share path?'
$Reponse = 'Y'
$filteredvalue = $Null
$filteredvalues = @()
Do
{
$filteredvalue = Read-Host 'What value would you like to filter out?'
$Response = Read-Host 'Would you like to filter out additional values? (y/n)'
$filteredvalues += $filteredvalue
}
Until ($Response -eq 'n')
$file1 = $path
$filtered = Import-Csv -Path $file1 | where {for($i = 0; $i -le $filteredvalues.GetUpperBound(0); $i++) {$_.IdentityReference -ne $filteredvalues[$i]}}
$file2 = "${path}_filtered.csv"
$filtered | Export-Csv -Path $file2 -NoTypeInformation
Вывод остается прежними ничего не отфильтровывается.