Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell命令-替换为多行值_Powershell - Fatal编程技术网

Powershell命令-替换为多行值

Powershell命令-替换为多行值,powershell,Powershell,我正在努力使用powershell将字符串替换为多行值。 该值来自Jenkins输入文本参数。所以这个值是一个多行字符串 我使用powershell将{{BUILD\u INFO\u CHANGES}}替换为%BUILD\u INFO\u CHANGES% %BUILD\u INFO\u CHANGES%值为 -bug1 -错误2 以下是脚本: powershell -Command "(gc %JOB_BUILD_DIR%\ThisBuildInfo.md) -replace '{{BUILD

我正在努力使用powershell将字符串替换为多行值。 该值来自Jenkins输入文本参数。所以这个值是一个多行字符串

我使用powershell将{{BUILD\u INFO\u CHANGES}}替换为%BUILD\u INFO\u CHANGES%

%BUILD\u INFO\u CHANGES%值为

-bug1

-错误2

以下是脚本:

powershell -Command "(gc %JOB_BUILD_DIR%\ThisBuildInfo.md) -replace '{{BUILD_INFO_CHANGES}}', '%BUILD_INFO_CHANGES%' | Out-File %JOB_BUILD_DIR%\ThisBuildInfo.md"
然而,我从詹金斯那里得到了错误响应


“{BUILD_INFO_FIXED_BUGS}}”,问题是将
-Command
参数用于除简单脚本以外的任何其他脚本,您将遇到诸如花括号和引号之类的字符在传递给PowerShell之前会被命令提示符错误解释的问题。您可以通过添加几层转义将自己绑在一起,或者有一种更简单的方法—使用
-EncodedCommand
参数

对于
-EncodedCommand
,您只需要对命令进行Base64编码,您可以使用以下PowerShell脚本执行此操作:

$command = @'
  # Enter your commands containg curly braces and quotes here
  # As long as you like  
'@
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes) | clip.exe
这会将编码的命令复制到剪贴板,然后使用命令所需的全部操作是键入:

powershell.exe -EncodedCommand
。。然后粘贴到命令中,这样您就可以得到如下结果:

powershell.exe -EncodedCommand IAAgACMAIABFAG4AdABlAHIAIAB5AG8AdQByACAAcwBjAHIAaQBwAHQAIABjAG8AbgB0AGEAaQBuAGcAIABjAHUAcgBsAHkAIABiAHIAYQBjAGUAcwAgAGEAbgBkACAAcQB1AG8AdABlAHMACgAgACAAIwAgAEEAcwAgAGwAbwBuAGcAIABhAHMAIAB5AG8AdQAgAGwAaQBrAGUAIAAgAA==

您现在有了命令提示符安全的东西。

谢谢Dave!你的解决方案给了我一个想法

下面是处理詹金斯的最简单的解决方案

在Jenkins构建作业中,我将以下脚本放在Powershell构建步骤中

$thisBuildInfoPath="$env:JOB_BUILD_DIR\ThisBuildInfo.md"
$fixedBugs=@("$env:BUILD_INFO_FIXED_BUGS")

(gc $thisBuildInfoPath) -replace "{{BUILD_INFO_FIXED_BUGS}}", $fixedBugs | sc $thisBuildInfoPath

这看起来像是CMD没有正确扩展多行变量。我建议您通过PowerShell引用环境变量,而不是通过CMD展开它们。顺便说一句,
{
}
对于正则表达式有特殊的意义,因此需要进行转义才能进行字面解释。
$thisBuildInfoPath="$env:JOB_BUILD_DIR\ThisBuildInfo.md"
$fixedBugs=@("$env:BUILD_INFO_FIXED_BUGS")

(gc $thisBuildInfoPath) -replace "{{BUILD_INFO_FIXED_BUGS}}", $fixedBugs | sc $thisBuildInfoPath