Основная проблема сценария PowerShell: "выражения разрешены только в качестве первого элемента конвейера"
Я пытаюсь написать простой скрипт, который читает файл, находит строку, заменяет строку другой строкой и сохраняет все новое содержимое файла (с замененной строкой) в новом файле. Вот что я использую:
(Get-Content C:file1.txt) | {$_ -replace "this:text", "withthis:text"} | Set-Content C:file2.txt
ошибка, которую я получаю: "выражения разрешены только как первый элемент конвейера"
Я уверен, что это из-за двоеточия ":" символ находится в обеих строках, которые я нахожу и заменяю его. Я пробовал экранирование символа двоеточия с символами " "и"`", но я получаю те же ошибки. Кто-нибудь знает, что в этом плохого?
Спасибо за помощь.
2 ответов
проблема заключается во втором элементе вашего конвейера.
{$_ -replace "this:text", "withthis:text"}
это блок скриптов (т. е. фрагмент кода). Если вы хотите применить scriptblock ко всем входящим элементам конвейера, вы можете использовать такой:
(Get-Content C:\file1.txt) | foreach-object {$_ -replace "this:text", "withthis:text"} | Set-Content C:\file2.txt
@shagun использует %
псевдоним foreach-object
командлет, так что код также выглядит правильно.
Я думаю, это потому, что после первого канала вы не обрабатываете каждый результат. так что правильный будет по мне:
(Get-Content C:\file1.txt) | %{$_ -replace "this:text", "withthis:text"} | Set-Content C:\file2.txt