Как я могу написать / создать дословно сценарий powershell из другого сценария powershell? - PullRequest
0 голосов
/ 10 апреля 2019

Следующий код (внизу) производит один из следующих выводов в файле

4/12/2019 = (get-date).AddDays(2).ToShortDateString();
4/13/2019 = (get-date).AddDays(2 + 1).ToShortDateString();

или, если я не инициализировал переменную

 = (get-date).AddDays(2).ToShortDateString();
 = (get-date).AddDays(2 + 1).ToShortDateString();

Это блок кода, я бы хотел, чтобы родительский файл ps1 дословно записывал дочерний файл ps1.

$multiLineScript2 = @"

    $startDate2 = (get-date).AddDays($resultOfSubtraction).ToShortDateString();
    $endDate2 = (get-date).AddDays($resultOfSubtraction + 1).ToShortDateString();
"@

$multiLineScript2 | Out-File "c:\file2.ps1";

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Я не мог найти это нигде, но кажется, что каждая переменная в скрипте (строковый литерал) должна быть экранирована с такой галочкой. Вместо того, чтобы удалить вопрос, я оставлю его для поиска.

$multiLineScript2 = @"

`$startDate2 = (get-date).AddDays($resultOfSubtraction).ToShortDateString();
`$endDate2 = (get-date).AddDays($resultOfSubtraction + 1).ToShortDateString();

"@
0 голосов
/ 10 апреля 2019

tl; dr :

Чтобы создать дословную многострочную строку (т. Е. Строку с буквальным содержанием ), используйте одиночные кавычки здесь-строка:

$multiLineScript2 = @'

    $startDate2 = (get-date).AddDays($resultOfSubtraction).ToShortDateString();
    $endDate2 = (get-date).AddDays($resultOfSubtraction + 1).ToShortDateString();
'@

Обратите внимание на использование @' и '@ в качестве разделителей.

Используйте double* цитируется здесь-строка, только если необходимо расширение строки (интерполяция) (и, если необходимо, выборочно предотвращение расширения путем экранирования $ как `$).


Get-Help about_quoting rules обсуждает типы строковых литералов, поддерживаемых PowerShell :

  • Чтобы получить строка с литерал содержимое (без интерполяции, что C # будет называть дословной строкой), используйте одинарные кавычки : '...'

  • Чтобы получить расширяемую строку (интерполяция строки), т. Е. Строку, в которую могут быть встроены ссылки на переменные и выражения, которые заменяются их значениями при присваивании, используйте DOUBLкавычки : "..."

    • Чтобы выборочно подавить расширение, backtick-escape $ chars .;Например, чтобы предотвратить интерполяцию $var (развернутое до ее значения) внутри строки "...", используйте `$var.
    • . Для обзора правил раскрытия строки см. этот ответ.

Оба основных типа также доступны как здесь-строки - в формах @'<newline>...<newline>'@ и @"<newline>...<newline>"@ соответственно (<newline> обозначает фактическую новую строку (разрыв строки)) - что облегчает определение многострочных строк .

  • Важно :
    • Ничто (кроме пробелов) не должно следовать за открывающим разделителем - @' или @" - в той же строке - содержимое строки должно быть определено в после lines.
    • Закрывающий разделитель - '@ или "@ (соответствует открывающему разделителю) - должен быть в самом начале строки .

Примеры:

# Single-quoted: literal:
PS> 'I am $HOME'
I am $HOME

# Double-quoted: expandable
PS> "I am $HOME"
I am C:\Users\jdoe

# Here-strings:

# Literal
PS> @'
I am
  $HOME
'@
I am
  $HOME

# Expandable
PS> @"
I am
  $HOME
"@
I am
  C:\Users\jdoe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...