首页 > 解决方案 > 如何从 PowerShell 模块检查命令行参数?

问题描述

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

测试参数.psm1:

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

Export-ModuleMember -Function *

测试参数.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"

标签: powershellparametersmodulescope

解决方案


您的代码的问题是您正在检查$PSBoundParametersFunction 本身的值,它没有参数。

您可以$PSBoundParameters通过不同命名的参数将变量从脚本发送到函数来使函数工作。

例如:

测试参数.psm1:

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

Export-ModuleMember -Function *

测试参数.ps1:

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

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


Test-ScriptParameter $PSBoundParameters

推荐阅读