有没有办法在执行-whatif
标志时忽略某一行?
SupportsShouldProcess
在 .psm1 模块中添加命令后,-whatif
在目标函数上执行时会出错。
受影响的代码片段基本上是试图确定 $Path 是否已设置,如果尚未设置,它将检查是否可以使用给定的名称作为路径:
function New-pallet {
[CmdletBinding(SupportsShouldProcess, ConfirmImpact='Low')]
param([string]Name, [string]Path)
if (!($Path)) {
if (Test-Path "..\$Name") {
if ((get-location).Path -eq (Resolve-Path "..\$Name").Path) {
$Path = "..\$Name"
} else {
$Path = ".\$Name"
}
} else {
$Path = ".\$Name"
}
}
if (!(Test-Path $Path)) {
New-Item $Path -ItemType Directory -Force | Out-Null
}
}
现在的问题是,当运行 what if 时,它会在 resolve-Path 上出错:
C:\Users\some_user> New-Pallet -Name test -whatif
随后的错误:
Resolve-Path : Cannot find path 'C:\Users\some_user\test' because it does not exist.
At C:\Users\some_user\Projects\some_project.psm1:255 char:72
+ ... MemberType NoteProperty -Name "Path" -Value (Resolve-Path $Path).Path
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\some_user\Projects\someproject\test:String) [Resolve-Path], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.ResolvePathCommand
不使用 -whatif 执行时,resolve-path 可以正常工作
有没有办法在使用该-whatif
标志时忽略此行?
或者有一种方法可以检查 -whatif 是否正在被使用?
答案1
事实证明,这$pscmdlet.ShouldProcess
正是魔法所在。