如何从PowerShell模块获取检查命令行参数?

时间:2019-04-10 06:06:57

标签: powershell parameters module scope

是否可以检查是否从模块(.psm1文件)中为PowerShell脚本指定了命令行参数?我不需要该值,只需知道是否指定了参数即可。 $PSBoundParameters.ContainsKey方法似乎不起作用。

TestParam.psm1:

function Test-ScriptParameter {
    [CmdletBinding()]
    param ()
    # This does not work (always returns false):
    return $PSBoundParameters.ContainsKey('MyParam')
}

Export-ModuleMember -Function *

TestParam.ps1:

[CmdletBinding()]
param (
    $MyParam= "Default"
)

$path = Join-Path (Split-Path -Path $PSCommandPath -Parent) 'TestParam.psm1'
Import-Module $path -ErrorAction Stop -Force

Test-ScriptParameter

这必须返回false

PS>.\TestParam.ps1

这必须返回true

PS>.\TestParam.psq -MyParam ""

这必须返回true

PS>.\TestParam.ps1 -MyParam "Runtime"

2 个答案:

答案 0 :(得分:0)

代码的问题是您正在检查函数本身的Auth.auth().addStateDidChangeListener { (auth, user) in self.ref = Database.database().reference(withPath: "personer") self.ref.observe(.value, with: { (snapshot) in var newPersons:[BackUp] = [] for item in snapshot.children { let nyPerson = BackUp(snapshot: item as! DataSnapshot) newPersons.append(nyPerson!) } self.personsArray = newPersons self.tableView.reloadData() }) } 值,该值没有参数。

您可以通过使用不同名称的参数将脚本中的$PSBoundParameters变量发送到函数中来使函数起作用。

例如:

TestParam.psm1:

$PSBoundParameters

TestParam.ps1:

function Test-ScriptParameter ($BoundParameters) {
    return $BoundParameters.ContainsKey('MyParam')
}

Export-ModuleMember -Function *

答案 1 :(得分:0)

这不可能像您正在考虑的那样完成。 PSBoundParameters变量对于cmdlet的执行是本地的,因此取决于cmdlet定义的param块。因此,在您的情况下,Test-ScriptParameter正在检查是否已使用参数MyParam调用它,但是由于未指定参数,因此它将始终为false

要实现我所希望的目标,您需要创建一个函数,该函数可以检查特定键的哈希结构,例如PSBoundParameters。密钥需要按名称提供。但是只要您需要,那么简单的$PSBoundParameters.ContainsKey('MyParam')就足够了。