PowerShell 在哪里获取它放在此处字符串中的换行符?

Where does PowerShell get the newline characters it puts in here strings?

考虑以下 PowerShell 代码:

@"


"@.GetEnumerator() | %{[int]$_}

在我的电脑上输出

13
10

分别是回车 return 和换行的 ASCII 控制字符的十进制表示。

The same code executed on AppVeyor outputs just a single number:

10

换句话说,PowerShell 在此处字符串中跨系统使用的字符之间似乎存在差异。我希望来源是 [System.Environment]::newlinethe same environment AppVeyor environment that output the single character in the here string, output

13
10

[System.Environment]::newline[System.Environment]::newline 似乎不是此处字符串中换行符的来源。

PowerShell 脚本本质上是一个字符串。而且它已经必须使用 "`n""`r`n" 进行换行。因此,如果 PowerShell 字符串文字跨越多行,则 PowerShell 解析器会保留行分隔符,该分隔符在此字符串文字中使用,作为字符串文字值的一部分。

例如:

"'a`nb`r`nc'.GetEnumerator() | %{[int]`$_}" | Set-Content .\Test.ps1
.\Test.ps1

将打印:

97
10
98
13
10
99