2015-09-03 2 views
1

Я нашел еще одно обсуждение этого вопроса, в котором было множество различных вариантов, но большинство из них, похоже, не работало для меня или для оригинального плаката. Однако я нашел пример, подтверждающий работу, однако я борюсь за то, чтобы заставить его работать и надеяться на помощь.Сценарий для замены строки, содержащей текст

Мне нужно найти строку, которая начинается с «ServerName =», и заменить ее на мою собственную строку. Я использовал пример, который был найден и изменил его, но я получаю ошибки при его использовании.

PowerShell Command:

powershell -Command "(Get-Content 'KFGame\Config\PCServer-KFGame.ini') | Foreach-Object {$_ -replace '^ServerName.$', ('ServerName=Network BUF 12345 Normal')} | Set-Content 'KFGame\Config\PCServer-KFGame.ini'" 

Сообщение об ошибке:

) было неожиданным в это время

+0

Я не могу воспроизвести вашу проблему, но в качестве первого шага вы можете хотите удалить большую часть круглых скобок в этой строке. Требуются только внешние скобки вокруг 'Get-Content'. Кроме того, ошибка может быть вызвана кодом до этой строки. –

+0

Я обновил исходное сообщение, я понял, что моя первая проблема запускала его с летучей мыши, не добавляя к нему «powershell -Command». Однако при обновлении он теперь сообщает, что «Foreach-Object» не распознается как внутренний/внешний командный, программный или командный файл, поэтому я подозреваю, что он все еще не работает как powershell. –

+0

Труба обрабатывается CMD, а не PowerShell. Чтобы исключить необходимость включения всего кода PowerShell в кавычки или (еще лучше) в сценарий, который вы запускаете через параметр '-File'. –

ответ

0

Если вы хотите запустить сложные операторы PowerShell из CMD, нужно положить их в кавычках, так что CMD просто видит строку и не пытается обрабатывать специальные символы (например, трубы):

powershell -Command "(Get-Content 'C:\Host400.txt') | Foreach-Object {$_ -replace '^workstationID.*$', (""WorkstationID=$computerName""} | Set-Content 'C:\Host400.txt'" 

Обратите внимание, что вам нужно либо избежать, либо заменить двойные кавычки в командной строке.

Лучший подход положить заявление PowerShell (ы) в .ps1 скрипт и запустить, что с помощью параметра -File:

powershell -File "C:\path\to\your.ps1" 
+0

Большое спасибо, эта информация очень помогла. Мой точный PS-скрипт теперь работает без ошибок, но фактически не заменяет строку. Можете ли вы проверить исходный пост и посмотреть, видите ли вы какие-либо проблемы с ним в этот момент? –

+0

@BrettPowell В вашем регулярном выражении отсутствует звездочка. Измените '^ ServerName. $' На '^ ServerName. * $'. –

+0

Это исправило это, спасибо! –

Смежные вопросы