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

Sco*_*ott 9 powershell

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

param(
    [string] $logOutput = "C:\SomeFolder\File.txt"
)
# Script...
Run Code Online (Sandbox Code Playgroud)

并且假设用户像这样运行脚本:

PS C:\> .\MyScript.ps1 -logOutput "C:\SomeFolder\File.txt"
Run Code Online (Sandbox Code Playgroud)

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

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

Jas*_*irk 15

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

if ($PSBoundParameters.ContainsKey('LogPath')) {
    # User specified -LogPath 
} else {
    # User did not specify -LogPath
}
Run Code Online (Sandbox Code Playgroud)