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

将参数从批处理脚本传递到PowerShell脚本失败,powershell,batch-file,command,argument-passing,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} &g

我试图通过批处理文件传递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
当执行上述批处理文件时,会弹出如下消息

可用命令:
*替换所有字符串以从each.config和.x获取新配置 反洗钱文件。
*删除当前配置并检索旧配置(替换 必须在之前执行)。

ReplaceTagsOnConfigFiles.ps1[替换|回滚]

替换替换每个.config和.xaml文件中的所有字符串以生成新配置。
回滚从备份中检索旧配置。注意:仅当您以前使用过“替换”选项时,此选项才有用。


没有文件被替换

请在这方面帮助我。

更改此命令:

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
第一个命令是否应该更改执行策略?如果是这样,您需要指定一个实际的策略<没有任何参数的代码>设置执行策略将无法工作。此外,只需将
-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

您收到的错误不是直接来自PowerShell的。大部分(最后一行除外)来自ReplaceTagsOnConfigFiles.ps1。问题是,此脚本期望替换回滚作为参数(如错误消息所示),但您没有传递任何参数。分号是一个命令分隔符(就像在cmd中使用一个符号AND),因此您要告诉PowerShell首先执行
D:\test\Bluebird\u 1.2.0\u RTM\ReplaceTagsOnConfigFiles.ps1
,不带任何参数。然后您将执行
REPLACE
命令,该命令本身也没有参数。这就是“无文件替换”错误的原因

您所需要做的就是用空格替换分号,使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

当我更改上述内容并将其作为批处理文件执行时,我找不到任何生成的日志文件,并且当尝试在命令提示符下拖放批处理文件时,它会抛出如下信息:警告:已经有一些备份文件。是否要继续此过程?[Y] 是[N]否[?]帮助(默认值为“N”):我认为您的执行策略处理没有按预期工作。请参阅更新的答案。如果未看到您的PowerShell代码,则无法对警告进行任何说明。我无法将代码粘贴到此处。这个问题还有别的解决办法吗?没有。AFAICS消息是由脚本生成的,因此您需要显示代码或自己调试代码。我们不是在玩猜谜游戏。我知道你在帮我。当注释框中只能输入几个字符时,我如何将代码粘贴到此处,因为我的代码不止这些字符。我通过链接共享文件,因为您是stackoverflow的新手,请注意,如果某个答案解决了您的问题,您应该单击该答案左侧的复选标记,以将其标记为已接受。