gpt4 book ai didi

powershell - PowerShell-脚本属性内的SupportsShouldProcess

转载 作者:行者123 更新时间:2023-12-03 01:20:39 25 4
gpt4 key购买 nike

当我尝试访问ShouldProcess脚本块中的变量时,我得到一个空表达式。这是我在脚本方法中拥有的:

$scaObject = [PerfWorker.CmdLets.PSDbInfoFactory]::GetPSDbInfo($info, $false)
$oracleObj = [PerfWorker.CmdLets.OracleParamsDto]$scaObject
Add-Member -InputObject $oracleObj -MemberType ScriptMethod -Name DropSchemas -Value {
$oraWorker = [PerfWorker.CmdLets.PSDbOracleInfo]$this.DbWorker
$args | foreach {
#Start getting error "You cannot call a method on a null-valued expression" from line below
if($psCmdLet.ShouldProcess(
"Delete Oracle Schema $_ on $($this.Hostname)? This action cannot be undone!",
"Delete Schema?"))
{
$oraWorker.DropS3DSchemas($_)
}
}
}

如果删除 $psCmdlet.ShouldProcess块并仅调用 $oraWorker.DropS3DSchemas()方法,则一切正常。

最佳答案

您似乎正在将cmdlet执行上下文与对象上脚本方法的执行上下文混合在一起。脚本方法代码捕获在一个脚本块中,该脚本块稍后在创建它的cmdlet方法的上下文之外运行。在if之前检查是否为$PSCmdlet -eq $null。我认为您无法在这里做您想做的事情。 ShouldProcess()需要在您的cmdlet上下文中执行。 PowerShell的方式是创建一个可以完成工作的Drop-Schemas cmdlet。然后,您可以在该cmdlet中使用ShouldProcess()功能。

关于powershell - PowerShell-脚本属性内的SupportsShouldProcess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com