如何基于其他参数条件化设置PowerShell的PSDefaultParameterValues
实现方案
你可以直接在PSDefaultParameterValues对应的脚本块中通过$PSBoundParameters获取当前命令调用时传入的所有绑定参数的键值对,不需要依赖$args,以下是符合你需求的实现:
# 不要直接覆盖整个$PSDefaultParameterValues,避免丢失已有的默认参数配置 $PSDefaultParameterValues["New-Item:Force"] = { # 读取当前调用传入的ItemType值 if ($PSBoundParameters.TryGetValue('ItemType', [ref]$itemType) -and $itemType -eq 'Directory') { # ItemType为Directory时启用Force return $true } # 其余情况沿用默认行为,不启用Force return $false }
逻辑说明
- 你之前通过
$args无法取到-ItemType的值,是因为$args只存储未被命令参数集匹配的零散参数,显式传入的绑定参数都会收录在$PSBoundParameters哈希表中 - 上述代码生效后,调用
New-Item -ItemType Directory时会自动追加-Force参数,创建文件类型的条目时不会改变原有默认行为
内容的提问来源于stack exchange,提问作者Jani Hyytiäinen
相关产品推荐
相关产品推荐

