PowerShell中Process-DropDownList函数参数未正常替换问题
问题根因
PowerShell 对两种引号包裹的字符串处理逻辑完全不同:
- 单引号
'包裹的内容为纯字面量,运行时不会解析其中的变量、表达式,会原样输出所有写入的字符 - 双引号
"包裹的内容支持变量插值,运行时会自动将$变量名格式的占位符替换为变量的实际值
代码中Begin块定义$outFileDirectories、$outDropLists两个哈希表数组时,Directory和DropName字段的字符串全部用单引号包裹,因此$FileDirectory、$Branch不会被参数值替换,直接输出字面量文本。
修复方法
将所有需要替换变量的字符串的外层单引号替换为双引号即可,修改后的Begin块代码如下:
Begin { $outFileDirectories = @( @{ Pattern = 'fibp*'; Directory = "$FileDirectory\1\$Branch\swagger.json" }, @{ Pattern = 'fibf*'; Directory = "$FileDirectory\2\$Branch\swagger.json" }, @{ Pattern = 'fifi*'; Directory = "$FileDirectory\3\$Branch\swagger.json" }, @{ Pattern = 'fibh*'; Directory = "$FileDirectory\4\$Branch\swagger.json" }, @{ Pattern = 'fiuc*'; Directory = "$FileDirectory\5\$Branch\swagger.json" }, @{ Pattern = 'fibu*'; Directory = "$FileDirectory\6\$Branch\swagger.json" }, @{ Pattern = 'fibc*'; Directory = "$FileDirectory\7\$Branch\swagger.json" } ) $outDropLists = @( @{ Pattern = 'fibp*'; DropName = "Someting1 - $Branch" }, @{ Pattern = 'fibf*'; DropName = "Something2 - $Branch" }, @{ Pattern = 'fifi*'; DropName = "Someting3 - $Branch" }, @{ Pattern = 'fibh*'; DropName = "Someting4 - $Branch" }, @{ Pattern = 'fiuc*'; DropName = "Someting5 - $Branch" }, @{ Pattern = 'fibu*'; DropName = "Something6 - $Branch" }, @{ Pattern = 'fibc*'; DropName = "Something7 - $Branch" } ) }
补充说明
如果后续需要拼接更复杂的路径、避免斜杠重复问题,对于本地路径可以用Join-Path做拼接,对于HTTP地址可以用格式化字符串-f实现,示例:
# 字符串格式化写法,无需依赖引号插值 Directory = '{0}/1/{1}/swagger.json' -f $FileDirectory, $Branch
这种写法逻辑更直观,也能避免引号误用的问题。
内容的提问来源于stack exchange,提问作者Mikael
相关产品推荐
相关产品推荐

