Передать строку с $ в параметр сценария Powershell - PullRequest
0 голосов
/ 14 октября 2019

У меня есть сценарий powershell с именем script.ps1

Он принимает параметр с именами -myString и -myOut.

Как передать строку типа $Test в-myString правильно?

Я пробовал

script.ps1 -myString '$test1' -myOut 3
script.ps1 -myString "$test1" -myOut 3

, но оба просто предполагают, что $ test - это другое имя параметра, и я пропускаю -myOut

edit: обратные пометки не отображаются в SO, но я включаю их.

Edit2:

param (
  [string]$myString= “”, 
  [string]$myOut= “”
)

Write-Host "Hello $myString $myOut"

Пример выполнения:

Script.ps1 -myString ‘$test’ -myOut 3

Не могу вспомнить точноевывод, но это что-то вроде: Hello 3

1 Ответ

3 голосов
/ 14 октября 2019

Вы можете использовать двойные кавычки, если вы выходите из $ с одним обратным кавычком перед ним: -myString "`$test1".

Но обычный подход заключается в использовании одинарных кавычек: -myString '$test1'.

Обратите внимание, что версия с одинарными кавычками должна иметь два одинаковых прямых апострофа (') по обе стороны отстроковое значение, НЕ backticks (`).

Для версии с двойными или одинарными кавычками вы можете использовать фигурные символы кавычек в Юникоде (те же, что у SmartQuotes)в Word), но они будут работать только в том случае, если ваш сеанс работает с настройкой локали, которую Powershell распознает как Unicode. Если есть несоответствие языкового стандарта, Windows не будет правильно интерпретировать такие кавычки (или любые другие символы, не входящие в ASCII).

Итак, если вы используете пунктуацию, совпадающую с кодировкой текста вашей сессии, эти подходы должны работать для васкак они делают для меня здесь:

PS /> type foo.ps1 # the test script
param($myString, $myOut)    
Write-Host "myString=$myString, myOut=$myOut"

PS /> ./foo.ps1 -myString "`$test1" -myOut 3 # ASCII double-quotes
myString=$test1, myOut=3

PS /> ./foo.ps1 -myString “`$test1” -myOut 3 # Unicode double-quotes
myString=$test1, myOut=3

PS /> ./foo.ps1 -myString '$test1' -myOut 3 # ASCII single-quotes 
myString=$test1, myOut=3

PS /> ./foo.ps1 -myString ‘$test1’ -myOut 3 # Unicode single-quotes
myString=$test1, myOut=3

Обратите внимание, что независимо от того, какой стиль двойных кавычек вы используете, обратная черта для выхода из знака доллара всегда должна быть обратной ASCII, `;Powershell не распознает фигурный эквивалент Unicode этого символа.

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