是否可以检查是否从模块(.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"
答案 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')
就足够了。