PowerShell - 支持在脚本属性中进行处理

时间:2013-03-05 14:01:02

标签: powershell powershell-v2.0

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

1 个答案:

答案 0 :(得分:1)

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