Terjebak di sqlserver Powershell

14

Saya sedikit pemula.

Jadi saya telah membuat skrip yang menggunakan Restore-SqlDatabasecommandlet. Namun, setelah saya menjalankannya, ia meninggalkan Powershell dalam kondisi berbeda.

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

Bagaimana saya bisa mengembalikan Powershell kembali ke antarmuka "normal"?

Juga, apa yang PS SQLSERVERdisebut awalan? Saya mencoba Google untuk ini dan muncul kosong.

Nathan Koop
sumber

Jawaban:

21

Dari artikel MS SQL Server PowerShell

• Penyedia SQL Server, yang memungkinkan mekanisme navigasi sederhana mirip dengan jalur sistem file. Anda bisa membangun jalur yang mirip dengan jalur sistem file, di mana drive dikaitkan dengan model objek manajemen SQL Server, dan node didasarkan pada kelas model objek. Anda kemudian dapat menggunakan perintah yang sudah dikenal seperti cd dan dir untuk menavigasi jalur yang mirip dengan cara Anda menavigasi folder di jendela prompt perintah. Anda dapat menggunakan perintah lain, seperti ren atau del , untuk melakukan tindakan pada node di path.

Memiliki penyedia seperti ini dimuat memungkinkan Anda untuk memperlakukan SQLServer dengan cara yang sama seperti Anda memperlakukan drive (surat).

Jadi kemungkinan besar di suatu tempat dalam kode Anda, Anda telah digunakan CDuntuk pindah ke penyedia SQLServer ( cd sqlserver:).

Jika Anda ingin kembali ke d:\thefolderspesifik, Anda akan menggunakan cd d:\thefolder.

Jika Anda ingin kembali ke tempat Anda memulai ketika selesai, maka Anda mungkin harus menyimpan lokasi direktori saat ini menjadi variabel di awal skrip, dan kemudian menggunakannya dengan cddi akhir skrip untuk mengubah kembali ke sana. direktori asli.

Atau Anda bisa, seperti yang disarankan oleh @ alroc ini dalam komentarnya, gunakan push-locationdan pop-locationcmdlets untuk menyimpan dan mengambil lokasi saat ini.

Ƭᴇcʜιᴇ007
sumber
3
Anda tidak harus menyimpan direktori saat ini ke variabel; gunakan push-locationsebelum mengimpor sqlpsdan pop-locationsetelah mengimpor dan Anda baik untuk pergi.
alroc
@ alroc Saya pikir mungkin ada sesuatu seperti itu, tapi saya tidak tahu itu. :) Berguna.
Ƭᴇcʜιᴇ007
7

ini sepertinya bekerja untuk saya:

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

Cukup ketik C:prompt perintah, untuk kembali ke prompt biasa (mis. C: \>).

Sekadar informasi, apa yang mungkin memicu prompt SMO (mis. PS SQLSERVER:> ) dari normal C: \> prompt), adalah ketika Anda memuat rakitan SMO tanpa Null-Out (out-null menekan output yang dikembalikan oleh cmdlet ).

Dengan kata lain, untuk menghindari masuk ke SMO prompt secara tidak sengaja saat memuat rakitan SMO, cukup pipa Out-Null seperti di bawah ini:

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

Karena Microsoft telah menghentikan metode LoadWithPartialName () , gunakan Add-Type sebagai gantinya:

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

Catatan: untuk mendapatkan path ke assembly / dll - gunakan metode GetAssemblies () seperti di bawah ini:

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

HTH.

Eddie Kumar
sumber