कुछ गहरी खोज के बाद मुझे अंततः दस्तावेज़ीकरण में मिला। ईवेंट हैंडलर जोड़ने के लिए आपको निम्न कार्य करने की आवश्यकता है:
प्रासंगिक असेंबली आयात करें;
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoExtended') | out-null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ConnectionInfo') | out-null
अब ईवेंट हैंडलर बनाने के लिए आपको इसे एक इनलाइन फ़ंक्शन के साथ घोषित करने की आवश्यकता है;
$percentEventHandler = [Microsoft.SqlServer.Management.Smo.PercentCompleteEventHandler] { Write-Host "Restored " $_.Percent "%" }
$completedEventHandler = [Microsoft.SqlServer.Management.Common.ServerMessageEventHandler] { Write-Host "Database " $databasename " Created Successfuly!" }
अब अंतिम चरण ईवेंट हैंडलर को उस ऑब्जेक्ट में जोड़ना है जिसके साथ आप काम कर रहे हैं। आम तौर पर सी # में आप बस निम्नलिखित करते हैं;
restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete);
restore.Complete += new Microsoft.SqlServer.Management.Common.ServerMessageEventHandler(restore_Complete);
यह PowerShell स्क्रिप्ट में काम नहीं करेगा, आपको घटनाओं को जोड़ने के लिए जेनरेट किए गए फ़ंक्शन का उपयोग करना है। फ़ंक्शन का नाम EventHandlerName है जिसे "add_" की शुरुआत में जोड़ा गया है, जैसा कि;
$dbRestore.add_PercentComplete($percentEventHandler)
$dbRestore.add_Complete($completedEventHandler)
आशा है कि यह किसी और को ऐसा करने की कोशिश करने में मदद करेगा!
अच्छा काम :) मुझे लगता है कि यह जब संचालकों को बताए scriptblocks कास्ट करने के लिए आवश्यक नहीं है। – stej
आप लिखने-होस्ट के बजाय लिखें-प्रगति का उपयोग कर सकते हैं। – JasonMArcher
इस विवरण को जोड़ने के लिए धन्यवाद। बहुत उपयोगी है क्योंकि मैं अन्य उदाहरणों के माध्यम से वापस काम कर रहा था – SheldonH