努力通过 $PSDefaultParameterValues 字典为“.ps1”脚本提供默认参数值

问题描述 投票:0回答:1

我有一个 .ps1,它有一个

-path
参数,我想通过
$PSDefaultParameterValues
字典为其提供默认值,我认为这与 cmdlet 的工作方式相同:

$PSDefaultParameterValues=@{
    "C:\Users\user1\Documents\PowerShell\Scripts\myScript.ps1:path" = "C:\temp\db.jsonc"
}

myScript.ps1
的代码是:

[CmdletBinding()]
param (
    [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName,mandatory)]
    [string]$Path
)
"path ---> $path"

因此,当我输入

.\myScript.ps1
时,我会收到“为以下参数提供值:”提示,但如果我运行
.\myScript.ps1 -path c:\some\path
,则输出为
path ---> c:\some\path

我尝试重新编写字典,但脚本仍然没有收到

-path
参数的值:

$PSDefaultParameterValues=@{
    #"myScript.ps1:path" = "C:\temp\db.jsonc"  
    "myScript.:pfath" = "C:\temp\db.jsonc"     # this does not work either
    #"C:\Users\user1\Documents\PowerShell\Scripts\myScript.ps1:path"    = "C:\temp\db.jsonc"
}
powershell
1个回答
0
投票

about_Parameters_Default_Values 从未声明支持脚本路径。在脚本参数中使用默认值并删除

Mandatory
装饰:

[CmdletBinding()]
param (
    [Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [ValidateNotNullOrEmpty()]
    [string] $Path = "C:\temp\db.jsonc"
)

"path ---> $path"

或者使用函数代替:

function Test-Function {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName, Mandatory)]
        [string]$Path
    )

    "path ---> $path"
}

$PSDefaultParameterValues['Test-Function:Path'] = 'C:\temp\db.jsonc'
Test-Function
© www.soinside.com 2019 - 2024. All rights reserved.