Добавить или изменить значения в CSV - PullRequest
0 голосов
/ 02 мая 2019

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

Вот как я его импортирую:

$csv = Import-Csv $csvFile -Delimiter ";"

CSV имеет три столбца,Имя пользователя, пароль и ключ.

Когда я хочу изменить одну строку:

$csv = $csv | ? { $_.UserName -eq $UserName } | % {
    $_.pass = $PasName
    $_.key  = $KeyName
} 
$csv | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation

, это оставляет меня с CSV без какого-либо контента.Почему это так?

Кроме того, когда я просто хочу добавить одну строку

$csv += [PSCustomObject]@{
    UserName = $UserName
    pass     = $PasName
    key      = $KeyName
}
$csv | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation

, она возвращает ошибку, говоря:

Fehler beim Aufrufen der Methode, da [System.Management.Automation.PSObject] keine Methode mit dem Namen "op_Addition" enthält.
В Zeile: 44 Zeichen: 13

Кто-нибудь знает, почему это происходит?

Я знаю, что мог бы просто добавить Контент следующим образом:

$xy = "{0};{1};{2}" -f xy,xy,xy
Add-Content -Path $csvFile -Value $xy

, но я бы предпочел экспортировать CSV совершенно новый

1 Ответ

1 голос
/ 02 мая 2019

Ваш второй фрагмент кода оставляет вас с пустым результатом, потому что вы присваиваете выход цикла для переменной $csv.Однако цикл не производит никакого вывода, поэтому вы эффективно очищаете переменную, делая это.Чтобы исправить это, просто удалите назначение.Цикл обновляет переменную на месте.

$csv | Where-Object {
    $_.UserName -eq $UserName
} | ForEach-Object {
    $_.pass = $PasName
    $_.key  = $KeyName
} 
$csv | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation

Ошибка из вашего третьего фрагмента кода может возникнуть, если $csv не является массивом (например, когда он пуст или содержит только одну запись).Вы можете уменьшить это, введя в массив массив при импорте:

$csv = @(Import-Csv $csvFile -Delimiter ";")

Кроме того, для добавления новой записи в CSV проще и проще добавить его в CSV:

[PSCustomObject]@{
    UserName = $UserName
    pass     = $PasName
    key      = $KeyName
} | Export-Csv $csvFile -Delimiter ";" -Force -NoTypeInformation -Append
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...