PowerShell 函数参数语法

Posted

技术标签:

【中文标题】PowerShell 函数参数语法【英文标题】:PowerShell function parameters syntax 【发布时间】: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

【问题讨论】:

【参考方案1】:

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

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

改为这样称呼它:

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

【讨论】:

我每天都在使用 Powershell,但时不时会犯这个完全错误,然后花 10 多分钟把头发拔掉。 哦,我想指出的是,使用Set-StrictMode 可以帮助您发现这个错误。

以上是关于PowerShell 函数参数语法的主要内容,如果未能解决你的问题,请参考以下文章

运行从 PowerShell 显式获取参数的 Python 函数(无需单独传递参数)

从 Powershell 调用带有数组参数的构造函数

条件 PowerShell 参数

PowerShell-自定义函数-参数互斥:ParameterSetName

powershell 模板powershell函数,占位符解释了Powershell中发生的高级参数绑定。用法:见里面的评论

PowerShell-自定义函数-位置参数:Position