我有一个声明性管道,应该执行 powershell 步骤来安装路径。
路径作为参数提供:
parameters {
string(name: 'UNC', defaultValue: '\\\\server01.lab.local\\shared_data', description: 'Shared location to build-data')
}
当我在简单的打印中使用该值时,它按预期工作:
...
powershell('''
write-host "test: "${env:UNC}""
''')
...
所以下一步实际上是安装它。但是,它没有按预期工作:
...
powershell('''
New-PSDrive -Name "k" -PSProvider "FileSystem" -Root "\"${env:UNC}\"\"
''')
...
我在这里遇到的错误是:powershell.exe : New-PSDrive : A positional parameter cannot be found that accepts argument '\\server01.lab.local\shared_data'. New-PSDrive -Name "k" -PSProvider "FileSystem" -Root ""${ ...
这时我才明白引用是问题所在。有效的 Powershell 命令是:
New-PSDrive -Name "k" -PSProvider "FileSystem" -Root "\\server01.labl.local\shared_data"
那么,在转义 UNC 路径中的引号方面,我缺少什么?
Thanks
不要尝试引用${env:UNC}
at all:
powershell('''
New-PSDrive -Name "k" -PSProvider "FileSystem" -Root ${env:UNC}
''')
如果您确实需要escape "
inside "..."
, use `"
not \"
; e.g.,
"Nat `"King`" Cole"
逐字产生Nat "King" Cole
- 继续读以获取更多信息。
As for 你尝试过什么:
\
is not special in PowerShell (though it is needed to escape verbatim "
chars. in arguments to the PowerShell CLI[1]).
所以,"\"${env:UNC}\"\"
解析如下:
- Argument 1:
-
"\"
是一个带有逐字内容的双引号字符串\
。由于带引号的字符串在开始时复合标记(即,如果直接后跟另一个带引号或不带引号的标记)本身始终被视为参数,该值将成为其自己的参数。这个值得注意的陷阱在这个答案 https://stackoverflow.com/a/66144160/45375.
- Argument 2:
-
${env:UNC}\
扩展到环境变量的值UNC
随后逐字逐句\
-
"\"
又是一个带有逐字内容的双引号字符串\
;因为它直接遵循unquoted token ${env:UNC}\
,它被认为是一部分same争论。
以下示例输出包含在中的收到的参数<...>
,每个都在自己的行中,演示了这一点:
PS> $env:UNC='foo bar';
& { foreach ($arg in $args) { "<$arg>" } } "\"${env:UNC}\"\"
<\>
<foo bar\\>
[1] This applies to powershell.exe
, the Windows PowerShell CLI; pwsh
, the PowerShell (Core) v6+ CLI, alternatively accepts ""
- see this answer https://stackoverflow.com/a/68136129/45375 for more information.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)