我有一个 .ps1,它有一个
-path
参数,我想通过 $PSDefaultParameterValues
字典为其提供默认值,我认为这与命令行开关的工作方式相同:
$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"
}
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