powershell - 如何从 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"
解决方案
您的代码的问题是您正在检查$PSBoundParameters
Function 本身的值,它没有参数。
您可以$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
推荐阅读
- django - 用鼠标移动对象
- swift - 如何在不拉伸原始图像的情况下扩展 CIImage 的空间(边界)?
- javascript - 如何读取 1 个标志位并同时获取整数
- python - 最小垂直切片总和
- crystal-lang - 程序在运行 Crystal 程序时收到但未处理信号 IOT (6)
- bash - 参数以一种奇怪的方式组合
- reactjs - 如何在样式化组件 React 中获取 refs.value?
- prolog - Prolog graph representation missing fact
- android - Android Studio 3.1.4 中的 logcat 在哪里?
- javascript - 我可以使用一个对象作为其他对象的模板吗?