Set-Content создаст новый файл, но не заменит старый - PullRequest
0 голосов
/ 05 июня 2018

У меня есть скрипт Powershell, который отслеживает текстовый файл инвентаря.Я хочу обновить текстовый файл с помощью скрипта.Следующая строка удалит предмет из инвентаря в соответствии с просьбой пользователя:

Get-Content inventory | Where-Object {$_ -notmatch "$removed"} | Set-Content inventory.new

Он работает просто отлично, но я хочу обновить оригинальный файл инвентаря, т.е. я нея не хочу делать "инвентарь. новый", я просто хочу обновить "инвентарь".Если я заменяю inventory.out на inventory, мне выдается следующая ошибка:

Set-Content : The process cannot access the file 'path\inventory' because it is being used by another process.

Самое смешное, что я am могу удалить inventory, затем переименовать inventory.out до inventory.Опять же, это работает, но не идеально.Я чувствовал себя глупо, просто проверяя это.Должно быть более элегантное решение!

1 Ответ

0 голосов
/ 05 июня 2018

Насколько я понимаю, когда вы открываете файл с помощью Get-Content, файл используется до конца этой команды, поэтому он не позволит вам внести изменения, пока Get-Content не освободит файл.

Простой обходной путь может быть:

$inventory = Get-Content inventory | Where-Object {$_ -notmatch "$removed"}
$inventory | Set-Content inventory
...