运行 script 只打印脚本源码!@#$%

Running script only prints script source code!@#$%

这对我来说很奇怪。 运行 一个脚本只会输出它的源代码。这是一个MRE。当然,问题也出在更大的脚本上。我要发什么疯?

PS C:\src\t> Get-Content -Path .\junk.ps1
[CmdletBinding()]
param (
    [Parameter()]
    [string]$S
)
{
    Write-Host $S
}
PS C:\src\t> .\junk.ps1 -S 'now'

    Write-Host $S

PS C:\src\t> $PSVersionTable.PSVersion.ToString()
7.2.1

脚本中的 {} 大括号定义了一个 脚本块文字 - 一个可以稍后调用的匿名函数。

去掉大括号,Write-Host 语句将起作用:

[CmdletBinding()]
param (
    [Parameter()]
    [string]$S
)

Write-Host $S