在PowerShell脚本中,是否可以判断是否正在使用默认参数值?

时间:2014-01-29 15:09:12

标签: powershell

假设我有一个带有一个参数的简单脚本,它有一个默认值:

param(
    [string] $logOutput = "C:\SomeFolder\File.txt"
)
# Script...

然后让用户像这样运行脚本:

PS C:\> .\MyScript.ps1 -logOutput "C:\SomeFolder\File.txt"

有没有办法让脚本能够知道用户明确输入了一个值(恰好与默认值相同),而不是自动决定默认值?

在此示例中,脚本将打印一些输出到给定文件。如果文件是不是由用户指定(即默认情况下自动使用),则脚本将在无法写入的情况下产生错误位置,并将只是默默地进行。但是,如果用户 指定了位置,并且脚本无法写入该位置,那么它应该产生错误并停止,警告用户。我怎么能实现这种逻辑?

2 个答案:

答案 0 :(得分:15)

当您有默认值时,判断参数是否被指定的最简单方法是查看$ PSBoundParameters。例如:

if ($PSBoundParameters.ContainsKey('LogPath')) {
    # User specified -LogPath 
} else {
    # User did not specify -LogPath
}

答案 1 :(得分:1)

这对你有用吗?

function Test-Param
        {
            [CmdletBinding()]
            param(
              [ValidateScript({Try {$null | Set-Content $_ -ErrorAction Stop
                                    Remove-Item $_
                                    $True}
                                Catch {$False}
                                })]
              [string] $logOutput = 'C:\SomeFolder\File.txt'


            )
        }

只有在无法使用-logOutput参数写入传入的文件位置时,验证脚本才会运行并抛出错误。如果未指定参数,则不会运行测试,并且$ logOutput将设置为默认值。