将参数从批处理脚本传递到PowerShell脚本失败

时间:2013-07-13 10:26:40

标签: powershell batch-file command argument-passing

我试图通过将REPLACE命令传递给批处理文件来找到解决方案,因为当使用REPLACE选项执行文件时“ReplaceTagsOnConfigFiles.ps1”将起作用,否则它将要求[REPLACE | ROLLBACK]

以下是批处理文件:

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从备份中检索旧配置。注意:如果您之前使用过'替换',此选项很有用   
  
  没有替换文件

请在这方面帮助我。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您获得的错误不是直接来自PowerShell。其中大部分(除了最后一行)都来自 ReplaceTagsOnConfigFiles.ps1 。问题是这个脚本需要 REPLACE ROLLBACK 作为参数(如错误消息所示),但是你没有传递任何参数。分号是一个命令分隔符(就像在cmd中使用&符号一样),所以你要告诉PowerShell首先执行D:\test\Bluebird_1.2.0_RTM\ReplaceTagsOnConfigFiles.ps1本身没有参数。然后你再次执行REPLACE命令,没有参数。这就是为什么会给你“没有文件替换”的错误。

您需要做的就是用空格替换分号,使 REPLACE 成为 ReplaceTagsOnConfigFiles.ps1 的参数,而不是新命令。


BTW,谈到&符号,在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