1

ShouldProcess スクリプト ブロック内の変数にアクセスしようとすると、null 式が返されます。これは私がスクリプトメソッドに持っているものです:

$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

コマンドレットの実行コンテキストと、オブジェクトのスクリプト メソッドの実行コンテキストを混在させているようです。スクリプト メソッド コードは、それを作成したコマンドレット メソッドのコンテキスト外で後で実行されるスクリプト ブロックにキャプチャされます。ifチェックする前に$PSCmdlet -eq $null。ここでやろうとしていることはできないと思います。コマンドレットのShouldProcess()コンテキストで実行する必要があります。PowerShell の方法は、作業を行う Drop-Schemas コマンドレットを作成することです。ShouldProcess()その後、そのコマンドレットで機能を使用できます。

于 2013-03-06T05:17:34.010 に答える