2013-02-04 24 views
0

我創建了一個FileSystemWatcher對象,我已註冊事件。我打算這個腳本將在同一個目錄下執行mocha。當我採取相同的代碼,並在這樣的情況下把它包將摩卡和管道結果調用到字符串

$testProgram = "mocha" 
& $testProgam 

我得到的結果.. ...

3 test complete.... 

現在..:我可以使用腳本執行mocha

$changed = Register-ObjectEvent $watcher "Changed" -Action { 
    clear 
    write-host "Running Test Scripts.........." 
    write-host "Changed: $($eventArgs.FullPath)" 
    & testProgram 
} 

我得到這個...

Running Test Scripts....................... 
Changed: C:\files\main.js 

& testProgram的結果在哪裏?

回答

0

我沒有PS來測試這個atm,所以請糾正我,如果我錯了。我可以想到多個問題,你可以檢查出:

  • 你有一個錯字。在你的行動塊中,testProgram在前面缺少一個美元符號。
  • 我很確定ObjectEvent在獨立範圍內運行動作塊,您無法從腳本獲取參數。您可以嘗試使用例如$global:testProgram
  • 相對路徑可能無法在此工作。您可能需要「mocha」可執行文件的絕對路徑或它是什麼。

編輯:我發現了一個解決方案,你可以嘗試可能的範圍問題(到達動作塊內的testprogram變量)。 Shay Levi在Technet上發佈了此代碼示例。它使用-MessageData參數將輸入傳遞到您的動作塊。以下是他的代碼示例:

#Use the -MessageData parameter: 

Register-ObjectEvent ... -MessageData $foo 

#Access the variable from within the action block 

$event.MessageData