Если ваш входной CSV-файл выглядит примерно так:
"SubmissionID","SubmitterName","TotalDocs","AddnPages","Cost"
"abcdef", "Check", "12", "3", "5"
"ghijkl", "check", "10", "7", "25"
Код ниже будет делать то, что вы просите (если я правильно понимаю вопрос)
Import-Csv "$folder\test2.csv" | ForEach-Object {
if (!([string]::IsNullOrEmpty($_.SubmissionID)) -and $_.SubmissionID -ne "SubmissionID"){
$totaldocs = $_.TotalDocs
$addnpages = $_.AddnPages
if ($_.SubmitterName -match "check") { # -match is case-insensitive
$_.Cost = ([int]$totaldocs * .09)
}
else {
$_.Cost = (([int]$totaldocs + [int]$addnpages) * .05)
}
###############################################################
# output the result. This is what you forgot in the original code
###############################################################
$_
}
} | Export-Csv "$folder\test3.csv" -NoTypeInformation
Выход:
"SubmissionID","SubmitterName","TotalDocs","AddnPages","Cost"
"abcdef","Check","12","3","1.08"
"ghijkl","check","10","7","0.9"
EDIT
Хорошее наблюдение со стороны LotPings:
Приведенный выше код пропустит строки, не прошедшие тест:
if (!([string]::IsNullOrEmpty($_.SubmissionID)) -and $_.SubmissionID -ne "SubmissionID")
Если вы хотите, чтобы эти строки также были включены в выходной файл, мы перемещаем (выводим) $_
на один шаг вниз. Код становится:
Import-Csv "$folder\test2.csv" | ForEach-Object {
if (!([string]::IsNullOrEmpty($_.SubmissionID)) -and $_.SubmissionID -ne "SubmissionID"){
$totaldocs = $_.TotalDocs
$addnpages = $_.AddnPages
if ($_.SubmitterName -match "check") { # -match is case-insensitive
$_.Cost = ([int]$totaldocs * .09)
}
else {
$_.Cost = (([int]$totaldocs + [int]$addnpages) * .05)
}
}
###############################################################
# output the result, changed or not.
###############################################################
$_
} | Export-Csv "$folder\test3.csv" -NoTypeInformation