将具有 space 的字符串值传递给另一个 powershell 文件

Pass string value having space to another powershell file

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

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

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

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

脚本以某种方式传递不带双引号的消息变量,因此 powershell 文件仅接收消息变量的第一部分(在 space 之前),即 "Hello".

如何使用 space(即 "Hello World")传递 strVal 变量?

一对双引号指示 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.

的值