Передать строковое значение с пробелом в другой файл powershell - PullRequest
1 голос
/ 17 января 2020

У меня есть скрипт powershell, который вызывает другой файл powershell, передавая строковый аргумент.

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

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

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

Каким-то образом сценарий передает переменную сообщения без двойных кавычек, поэтому файл powershell получает только первую часть переменной сообщения (перед пробелом), то есть "Hello".

Как передать переменная strVal с пробелом (то есть "Hello World")?

1 Ответ

1 голос
/ 17 января 2020

Пара двойных кавычек сигнализирует 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...