2013-03-05 24 views
1

當我嘗試訪問ShouldProcess腳本塊內的變量時,我得到一個空表達式。這是我在一個腳本方法:PowerShell - 在腳本屬性中支持應用程序

$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

您是否在函數的開頭加入了[[CmdletBinding(SupportsShouldProcess = $ true)]'屬性? – Poorkenny 2013-03-05 15:11:08

+0

是的,它是作爲[CmdletBinding(SupportsShouldProcess = $ True)] – Sunit 2013-03-05 15:36:02

+0

你能提供完整的例外嗎? – 2013-03-05 18:18:47

回答

1

您似乎將cmdlet執行上下文與腳本方法的執行上下文混合在一個對象上。腳本方法代碼是在稍後在創建它的cmdlet方法的上下文之外運行的腳本塊中捕獲的。在if之前檢查。我不認爲你可以做你想在這裏做的事情。 ShouldProcess()需要在cmdlet的上下文中執行。 PowerShell的方式是創建一個執行該工作的Drop-Schemas cmdlet。然後,您可以使用該cmdlet中的ShouldProcess()功能。

+0

是的,我很害怕這個。我添加腳本方法的原因是因爲它依賴於數據庫 - MSSQL的我沒有這個方法。我想我可以添加另一個函數並調用它... – Sunit 2013-03-06 13:59:38

相關問題