Bị mắc kẹt trong Powershell sqlserver


13

Tôi là một chút của một newbie quyền lực.

Vì vậy, tôi đã tạo một tập lệnh sử dụng tập Restore-SqlDatabaselệnh. Tuy nhiên, sau khi tôi chạy nó, nó khiến Powershell ở một trạng thái khác.

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

Làm cách nào tôi có thể đưa Powershell trở lại giao diện "bình thường"?

Ngoài ra, PS SQLSERVERtiền tố được gọi là gì? Tôi đã cố gắng để Google cho điều này và đến trống rỗng.

Câu trả lời:


21

Từ bài viết MS SQL Server PowerShell

• Nhà cung cấp SQL Server, cho phép cơ chế điều hướng đơn giản tương tự như đường dẫn hệ thống tệp. Bạn có thể xây dựng các đường dẫn tương tự như các đường dẫn hệ thống tệp, trong đó ổ đĩa được liên kết với mô hình đối tượng quản lý SQL Server và các nút dựa trên các lớp mô hình đối tượng. Sau đó, bạn có thể sử dụng các lệnh quen thuộc như cddir để điều hướng các đường dẫn tương tự như cách bạn điều hướng các thư mục trong cửa sổ nhắc lệnh. Bạn có thể sử dụng các lệnh khác, chẳng hạn như ren hoặc del , để thực hiện các hành động trên các nút trong đường dẫn.

Có một nhà cung cấp như thế này được tải cho phép bạn đối xử với SQLServer giống như cách bạn đối xử với một ổ đĩa (chữ cái).

Vì vậy, rất có thể ở đâu đó trong mã của bạn, bạn đã sử dụng CDđể chuyển sang nhà cung cấp SQLServer ( cd sqlserver:).

Nếu bạn muốn quay lại d:\thefoldercụ thể bạn sẽ sử dụng cd d:\thefolder.

Nếu bạn muốn quay lại nơi bạn đã bắt đầu khi hoàn thành, thì có lẽ bạn sẽ phải lưu vị trí thư mục hiện tại vào một biến bắt đầu của tập lệnh, sau đó sử dụng nó cdở cuối tập lệnh để thay đổi trở lại tập lệnh đó thư mục gốc.

Hoặc bạn có thể, như được đề xuất bởi @ alroc's trong nhận xét của mình, sử dụng push-locationpop-locationlệnh ghép ngắn để lưu trữ và truy xuất vị trí hiện tại.


3
Bạn không phải lưu thư mục hiện tại vào một biến; sử dụng push-locationtrước khi nhập sqlpspop-locationsau khi nhập và bạn tốt để đi.
alroc

@alroc Tôi đoán có lẽ có một cái gì đó như thế, nhưng tôi không nhận ra cái đó. :) Tiện dụng.
Ƭᴇcʜιᴇ007

6

điều này dường như làm việc cho tôi:

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

1

Chỉ cần gõ C:vào dấu nhắc lệnh, để quay lại dấu nhắc thông thường (ví dụ: C: \>).

Chỉ để biết thông tin, những gì có thể đã kích hoạt dấu nhắc SMO (tức là PS SQLSERVER:> ) từ dấu nhắc C: \> thông thường ), là khi bạn tải cụm SMO mà không có Out-Null (out-null sẽ chặn đầu ra được trả về bởi lệnh ghép ngắn ).

Nói cách khác, để tránh vô tình đi vào dấu nhắc SMO khi tải cụm SMO, chỉ cần đặt ống Out-Null như sau:

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

Vì Microsoft đã không dùng phương thức LoadWithPartialName () , nên sử dụng Add-Type thay thế:

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

Lưu ý: để có đường dẫn đến cụm / dll của bạn - hãy sử dụng phương thức GetAssemblies () như dưới đây:

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

HTH.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.