【发布时间】:2014-03-19 05:19:51
【问题描述】:
假设我有一个像这样的 Powershell 脚本 TestParameters.ps1,有两个强制性的命名参数和两个可选参数:
[CmdletBinding()]
Param (
[Parameter(Mandatory=$True)]
[string] $AFile = "C:\A\Path",
[Parameter(Mandatory=$True)]
[ValidateSet("A","B","C", "D")]
[string] $ALetter = "A",
[Parameter(Mandatory=$False)]
[ValidateNotNullOrEmpty()]
[string] $Optional1 = "Foo",
[Parameter(Mandatory=$False)]
[ValidateNotNullOrEmpty()]
[string] $Optional2 = "Bar"
)
echo "Hello World!"
$psboundparameters.keys | ForEach {
Write-Output "($_)=($($PSBoundParameters.$_))"
}
假设我这样调用脚本:
.\TestParameters.ps1 `
-AFile "C:\Another\Path" `
-ALetter "B"
产生输出:
Hello World!
(AFile)=(C:\Another\Path)
(ALetter)=(B)
Powershell 设置变量 $Optional1 和 $Optional2 ...但是我如何轻松地将它们显示到屏幕上,就像我使用 $PSBoundParameters 的方式一样?
我确实不想在每次有脚本时简单地编写以下内容:
Write-Host $AFile
Write-Host $ALetter
Write-Host $Optional1
Write-Host $Optional2
注意事项:
- $args 似乎只包含未绑定的参数,而不是默认值 参数
-
$MyInvocation 似乎只包括在命令行上传递的命令编辑:MyInvocation 有成员变量 MyCommand.Parameters,它似乎有所有的参数,而不仅仅是那些在命令行上传递的...见接受的答案,如下。 - Get-Variable 似乎在结果列表中包含可选变量,但我不知道如何将它们与其他变量区分开来
【问题讨论】:
标签: powershell