पॉवर्सशेल स्केलेवर में फंस गया


14

मैं थोडा बहुत पॉवरशेल्ड नौसिखिया हूँ।

इसलिए मैंने एक स्क्रिप्ट बनाई है जो Restore-SqlDatabaseकमांडलेट का उपयोग करती है । हालाँकि, इसे चलाने के बाद, यह पॉवर्स को अलग अवस्था में छोड़ देता है।

PS D:\theFolder\> .\myRestoreDatabaseScript.ps1
... snip does the work ...
PS SQLSERVER:\>

मैं Powershell को "सामान्य" इंटरफ़ेस पर कैसे वापस कर सकता हूं?

इसके अलावा, PS SQLSERVERउपसर्ग को क्या कहा जाता है? मैंने इसके लिए Google को कोशिश की और खाली आया।

जवाबों:


21

MS लेख SQL सर्वर PowerShell से

• एक SQL सर्वर प्रदाता, जो फ़ाइल सिस्टम पथ के समान एक सरल नेविगेशन तंत्र को सक्षम करता है। आप फ़ाइल सिस्टम पथ के समान पथ बना सकते हैं, जहां ड्राइव SQL सर्वर प्रबंधन ऑब्जेक्ट मॉडल से जुड़ा है, और नोड ऑब्जेक्ट मॉडल वर्गों पर आधारित हैं। फिर आप कमांड कमांड का उपयोग कर सकते हैं जैसे cd और dir जिस तरह से आप कमांड प्रॉम्प्ट विंडो में फ़ोल्डरों को नेविगेट करते हैं उसी तरह पथ को नेविगेट करने के लिए। आप मार्ग में नोड्स पर कार्रवाई करने के लिए , अन्य कमांड जैसे कि रेन या डेल का उपयोग कर सकते हैं ।

इस लोड की तरह एक प्रदाता होने से आप SQLServer को उसी तरह से व्यवहार कर सकते हैं जिस तरह से आप ड्राइव (अक्षर) का इलाज करेंगे।

तो आपके कोड CDमें SQLServer प्रदाता ( cd sqlserver:) में जाने के लिए आपके द्वारा उपयोग किए जाने की संभावना सबसे अधिक है ।

यदि आप d:\thefolderविशेष रूप से उपयोग करने के लिए वापस जाना चाहते थे cd d:\thefolder

यदि आप उस स्थान पर वापस लौटना चाहते हैं जहाँ आपने शुरू किया था, तो संभवतः आपको वर्तमान निर्देशिका स्थान को एक चर को स्क्रिप्ट की शुरुआत में संग्रहीत करना होगा, और फिर इसे cdवापस बदलने के लिए स्क्रिप्ट के अंत में इसका उपयोग करना होगा मूल निर्देशिका।

या आप, के रूप में @ alroc उसकी टिप्पणी में है ने सुझाव दिया, इस्तेमाल कर सकते हैं push-locationऔर pop-locationcmdlets का दुकान में और वर्तमान स्थान को पुनः प्राप्त।


3
आपको वर्तमान निर्देशिका को किसी चर में सहेजना नहीं है; push-locationआयात करने से पहले sqlpsऔर आयात करने के pop-locationबाद उपयोग करें और आप जाने के लिए अच्छे हैं।
alroc

@alroc मुझे लगा कि शायद ऐसा कुछ था, लेकिन मुझे उस बारे में पता नहीं था। :) काम।
14c atιᴇ007

7

यह मेरे लिए काम करता है:

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSqlCmd.sql" | out-null

1

बस C:कमांड प्रॉम्प्ट पर टाइप करें, सामान्य पर वापस जाने के लिए (जैसे C: \>) प्रॉम्प्ट।

बस जानकारी के लिए, सामान्य C: \> प्रॉम्प्ट से SMO प्रॉम्प्ट (यानी PS SQLSERVER:> ) को ट्रिगर किया जा सकता है , जब आप SMO असेंबली को आउट-नल के बिना लोड करते हैं (आउट-नल दबा हुआ आउटपुट cmdlet द्वारा वापस ले लेता है )।

दूसरे शब्दों में, एसएमओ असेंबली को लोड करते समय अनजाने में एसएमओ प्रॉम्प्ट में जाने से बचने के लिए, बस नीचे दिए गए आउट-एन को पाइप करें:

[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null

चूंकि Microsoft ने LoadWithPartialName () विधि को हटा दिया है , इसके बजाय ऐड-टाइप का उपयोग करें:

Add-Type -Path "your_path_to_assembly\Smo.dll"

नोट: अपनी विधानसभा / dll के लिए रास्ता पाने के लिए - नीचे दिए गए GetAssemblies () विधि का उपयोग करें:

[System.AppDomain]::CurrentDomain.GetAssemblies() | ? {$_.Location -match 'Smo.dll'}

HTH।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.