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



我有一个简单的脚本,其中一个参数,该参数具有默认值:

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

并说用户像这样运行脚本:

PS C:> .MyScript.ps1 -logOutput "C:SomeFolderFile.txt"

有什么方法可以知道用户明确输入一个值(恰好与默认值相同),而不是让默认值自动确定?

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

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

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

这个可以适合您吗?

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

            )
        }

validate脚本只能使用-logoutput参数在传递的文件位置写入时,才会运行并投掷错误。如果未指定参数,则不会运行测试,并且$ logoutput将设置为默认值。

最新更新