PowerShell函数参数语法

Sha*_*unt 2 powershell powershell-3.0

为什么函数外部的Write-Host与函数内部的工作不同?

似乎某种程度上参数变量正在从我声明的变化......

function a([string]$svr, [string]$usr) {
    $x = "$svr\$usr"
    Write-Host $x
}

$svr = 'abc'
$usr = 'def'
$x = "$svr\$usr"
Write-Host $x
a($svr, $usr)
Run Code Online (Sandbox Code Playgroud)

结果...

ABC\DEF

abc def \

bri*_*ist 8

不要使用括号和逗号调用powershell中的函数或cmdlet(仅在方法调用中执行此操作)!

当你打电话给a($svr, $usr)你时,传递一个数组,其中2个值作为第一个参数的单个值.它等同于调用它a -svr $svr,$usr,这意味着$usr根本没有指定参数.所以现在$x等于数组的字符串表示形式(带空格的连接),后跟反斜杠,后跟什么都没有.

而是像这样称呼它:

a $svr $usr
a -svr $svr -usr $usr
Run Code Online (Sandbox Code Playgroud)

  • 我每天都使用Powershell,我时不时会犯这个错误,花10多分钟把头发拉出来. (2认同)
  • 哦,我想指出使用`Set-StrictMode`将帮助你抓住这个错误. (2认同)