如何从另一个Powershell脚本逐字编写/创建Powershell脚本?

时间:2019-04-10 12:15:46

标签: powershell

下面的代码(在底部)在文件中产生以下输出之一

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 个答案:

答案 0 :(得分:1)

我在任何地方都找不到它,但是看来脚本中的每个变量(字符串文字)都必须像这样打勾。与其删除问题,不如将其留给搜索命中。

$multiLineScript2 = @"

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

"@

答案 1 :(得分:0)

tl;博士

要创建 verbatim 多行字符串(即具有文字内容的字符串),请在此处使用单引号

$multiLineScript2 = @'

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

请注意使用@''@作为分隔符。

仅在需要字符串扩展(插值)(并且如果需要,选择性地防止扩展)时,在此处使用双引号此处字符串通过将$转义为`$)。


Get-Help about_quoting rules讨论了PowerShell支持的字符串文字类型

  • 要获取具有 literal 内容的字符串(无插值,C#称为逐字字符串),请使用单引号'...'

  • 获取 可扩展字符串(字符串插值),即可以嵌入变量引用和表达式的字符串,并用其值替换作业,请使用双引号"..."

    • 要有选择地抑制扩展,请反引号$个字符。例如,为防止$var"..."字符串内插值(扩展到其值),请使用`$var
    • 有关字符串扩展规则的概述,请参见this answer

这两种基本类型也都可以作为 here-strings 使用-分别以@'<newline>...<newline>'@@"<newline>...<newline>"@的形式出现(<newline>用于实际的换行符(换行符))-使定义多行字符串更容易

  • 重要
    • 在空白行中,除空白外,@'@"后面的任何内容都不得跟随-字符串的内容必须在以下行中定义。 / li>
    • 结束定界符-'@"@(与开始定界符匹配)-必须在行的开头

示例:

# 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