2013-07-13 2 views
0

Я пытаюсь найти решение, передав команду REPLACE через командный файл, поскольку «ReplaceTagsOnConfigFiles.ps1» будет работать, когда файл будет выполнен с параметром REPLACE или иным образом попросит [ЗАМЕНИТЬ | ROLLBACK]Передача аргумента из сценария пакетного сценария в сценарий PowerShell завершается с ошибкой

Ниже пакетный файл:

echo "Changing the execution policy" 
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command {Set-ExecutionPolicy} > C:\Temp\a.out 

echo "Updating the Server details:" 

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1;REPLACE" > C:\Temp\b.out 

Когда выше пакетный файл выполняется, он всплывает сообщение, как показано ниже.

Доступные команды:
* Заменить все строки, чтобы получить новую конфигурацию со всех .config и .x Aml файл.
* Удалите текущую конфигурацию и извлеките старые (необходимо выполнить замену ).

ReplaceTagsOnConfigFiles.ps1 [REPLACE | ROLLBACK]

REPLACE Заменяет все строки в каждом файле .config и .xaml для создания новой конфигурации.
ROLLBACK Извлечение старой конфигурации из резервных копий. ПРИМЕЧАНИЕ. Этот параметр полезен, только если вы раньше использовали «замену».


Нет файлов заменен

Пожалуйста, помогите мне в этом отношении.

ответ

1

Изменить эту команду:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1;REPLACE" > C:\Temp\b.out 

в этом:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1" REPLACE > C:\Temp\b.out 

должна ли первая команда, чтобы изменить политику выполнения? Если это так, вам нужно указать фактическую политику. Set-ExecutionPolicy без каких-либо аргументов не будет работать. Кроме того, было бы проще просто добавить -ExecutionPolicy Bypass ко второй команде:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1" REPLACE > C:\Temp\b.out 
+0

Когда я изменил это и выполнил его как пакетный файл, я не смог найти файл журнала, который был сгенерирован, и при попытке перетащить командный файл в команде подскажите, он выдает информацию следующим образом: ПРЕДУПРЕЖДЕНИЕ Есть уже некоторые файлы обратно. Вы хотите продолжить процесс? [Y] Да [N] Нет [?] Справка (по умолчанию «N»): Y – user2578953

+0

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

+0

Я не могу вставить код здесь. Есть ли другое решение для этого. – user2578953

0

Ошибка вы получаете не из PowerShell напрямую. Большинство из них (все, кроме последней строки) составляют от ReplaceTagsOnConfigFiles.ps1. Проблема заключается в том, что этот сценарий ожидает либо REPLACE, либо ROLLBACK как аргумент (как указано сообщением об ошибке), но вы не передаете ему никаких аргументов. Точка с запятой - это разделитель команд (например, использование амперсанда в cmd), поэтому вы сообщаете PowerShell сначала выполнить D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1 без аргументов. Затем вы выполняете команду REPLACE, опять же без аргументов. Вот что дает вам ошибку «Нет файлов заменены».

Все, что вам нужно сделать, это заменить точкой с запятой с пробелом, чтобы сделать ЗАМЕНЫ аргумент для ReplaceTagsOnConfigFiles.ps1, а не новую команду.


Кстати, говоря о амперсандах, в PowerShell они используются для выполнения неместных команд (в том числе файлов .ps1 сценарий).То, как вы это делаете здесь, работает, потому что в пути нет пробелов, но вы столкнетесь с проблемами, если вам когда-либо понадобится процитировать путь (Powershell будет эхо его как строка, а не выполнять его). Вы должны привыкнуть к этому:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "& 'D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1' REPLACE" > C:\Temp\b.out 
+0

Поскольку вы новичок в stackoverflow, обратите внимание, что если ответ разрешает вашу проблему, вы должны нажать галочку слева от этого ответа, чтобы отметить ее как принятую. –

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