当我尝试访问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()
方法,那么一切正常。
答案 0 :(得分:1)
您似乎将cmdlet执行上下文与对象上的脚本方法的执行上下文混合在一起。脚本方法代码在脚本块中捕获,该脚本块稍后在创建它的cmdlet方法的上下文之外运行。在if
检查$PSCmdlet -eq $null
之前。我认为你不能做你想做的事。 ShouldProcess()
需要在cmdlet的上下文中执行。 PowerShell的方法是创建一个Drop-Schemas cmdlet来完成工作。然后,您可以使用该cmdlet中的ShouldProcess()
功能。