【问题标题】:PowerShell function parameters syntaxPowerShell 函数参数语法
【发布时间】:2015-01-12 12:46:32
【问题描述】:

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

似乎参数变量与我声明的不同...

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

$svr = 'abc'
$usr = 'def'

Write-Host "$svr\$usr"  # abc\def
a($svr, $usr)           # abc def

【问题讨论】:

    标签: powershell powershell-3.0


    【解决方案1】:

    不要在 PowerShell 中使用括号和逗号调用函数或 cmdlet(仅在方法调用中这样做)!

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

    改为这样称呼它:

    a $svr $usr
    a -svr $svr -usr $usr
    

    【讨论】:

    • 我每天都在使用 Powershell,但时不时会犯这个完全错误,然后花 10 多分钟把头发拔掉。
    • 哦,我想指出的是,使用Set-StrictMode 可以帮助您发现这个错误。
    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多