Powershell sqlserver içinde sıkışmış


14

Biraz powershell acemi oldum.

Bu yüzden komut dosyasını kullanan bir komut dosyası oluşturdum Restore-SqlDatabase. Ancak, çalıştırdıktan sonra Powershell'i farklı bir durumda bırakır.

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

Powershell'i "normal" arayüze nasıl geri döndürebilirim?

Ayrıca, PS SQLSERVERönek ne denir? Bunun için Google'a denedim ve boş geldim.

Yanıtlar:


21

MS makalesinden SQL Server PowerShell

• Dosya sistemi yollarına benzer basit bir gezinme mekanizması sağlayan bir SQL Server sağlayıcısı. Sürücünün bir SQL Server yönetim nesnesi modeliyle ilişkili olduğu ve düğümlerin nesne modeli sınıflarına dayandığı dosya sistemi yollarına benzer yollar oluşturabilirsiniz. Daha sonra , komut istemi penceresinde klasörlerde gezinme şekline benzer yollarda gezinmek için cd ve dir gibi tanıdık komutları kullanabilirsiniz . Yoldaki düğümlerde eylemler gerçekleştirmek için ren veya del gibi diğer komutları kullanabilirsiniz .

Bunun gibi bir sağlayıcı yüklü olması, SQLServer'ı bir sürücüye (harf) yaptığınız gibi işlemenizi sağlar.

Büyük olasılıkla kodunuzun herhangi bir yerinde CDSQLServer sağlayıcısına ( cd sqlserver:) geçmek için kullandınız .

Eğer d:\thefolderözel olarak geri dönmek isteseydiniz kullanırsınız cd d:\thefolder.

Tamamlandığında başladığınız yere geri dönmek istiyorsanız, geçerli dizin konumunu komut dosyasının başlangıcında bir değişkene depolamanız ve daha sonra buna cdgeri dönmek için komut dosyasının sonunda ile kullanmanız gerekir . orijinal dizin.

Ya da @ alroc'un yorumunda önerdiği gibi , geçerli konumu saklamak ve almak için push-locationve pop-locationcmdlet'lerini kullanabilirsiniz .


3
Geçerli dizini bir değişkene kaydetmeniz gerekmez; push-locationiçe aktarmadan önce sqlpsve pop-locationiçe aktardıktan sonra kullanın ve hazırsınız.
alroc

@alroc Muhtemelen böyle bir şey olduğunu düşündüm, ama bunun farkında değildim. :) Kullanışlı.
Juncʜιᴇ007

7

bu benim için çalışıyor gibi görünüyor:

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

1

C:Normal (örneğin C: \>) istemine geri dönmek için komut istemini yazmanız yeterlidir .

Sadece bilgi için, SMO istemini (örneğin PS SQLSERVER:> ) normal C: \> isteminden tetiklemiş olabilir , SMO düzeneğini Out-Null olmadan yüklediğinizde (out-null, cmdlet tarafından döndürülen çıktıyı bastırır) ).

Başka bir deyişle, SMO düzeneğini yüklerken yanlışlıkla SMO istemine girmekten kaçınmak için Out-Null'u aşağıdaki gibi borulamanız yeterlidir :

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

Microsoft LoadWithPartialName () yöntemini kullanımdan kaldırdığından , Add- Type'ı kullanın:

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

Not: assembly / dll yolunuza ulaşmak için - GetAssemblies () yöntemini aşağıdaki gibi kullanın :

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

HTH.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.