首页 > 解决方案 > 将有空格的字符串值传递给另一个powershell文件

问题描述

我有一个 powershell 脚本,它调用另一个传递字符串参数的 powershell 文件。

param (
  [string]$strVal = "Hello World"
)

$params = @{
message = "$strVal"
}

$sb = [scriptblock]::create(".{$(get-content $ps1file -Raw)} $(&{$args} @params)")

不知何故,脚本传递了不带双引号的消息变量,因此 powershell 文件只接收消息变量的第一部分(在空格之前),即“Hello”。

如何传递带有空格的 strVal 变量(即“Hello World”)?

标签: powershellhashtable

解决方案


双引号对指示 PowerShell 执行字符串扩展。如果您希望双引号按字面意思输出,则需要将它们转义(防止扩展)或用单引号将它们括起来。但是,单引号对指示 PowerShell 按字面意思处理内部的所有内容,因此您的变量不会插值。鉴于这种情况,您需要字符串扩展、变量插值和文字双引号。

您可以执行以下操作:

# Double Double Quote Escape
@{message = """$strVal"""}
Name                           Value
----                           -----
message                        "Hello World"

# Backtick Escape
@{message = "`"$strVal`""}
Name                           Value
----                           -----
message                        "Hello World"

报价解析从左到右进行,这意味着最左边的报价类型优先。因此'"$strVal"',由于外部单引号对,因此将按字面意思打印所有内容。"'$strVal'"将打印单引号和$strVal.


推荐阅读