1

当我尝试访问 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()方法,那么一切正常。

4

1 回答 1

3

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

于 2013-03-06T05:17:34.010 回答