Застряг у Powershell sqlserver


14

Я трохи новачок.

Тому я створив сценарій, який використовує Restore-SqlDatabaseкомандлет. Однак після того, як я запускаю його, він залишає Powershell в іншому стані.

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

Як я можу повернути Powershell назад до "нормального" інтерфейсу?

Також, як називається PS SQLSERVERпрефікс? Я спробував для цього Google і вийшов порожнім.

Відповіді:


21

З статті MS SQL Server PowerShell

• Провайдер SQL Server, який забезпечує простий механізм навігації, подібний до шляхів файлової системи. Ви можете побудувати шляхи, подібні до шляхів файлової системи, де диск пов'язаний з об'єктною моделлю управління SQL Server, а вузли базуються на класах об'єктної моделі. Потім ви можете використовувати знайомі команди, такі як cd та dir, для навігації по шляхах, подібним до способу переміщення папок у вікні командного рядка. Ви можете використовувати інші команди, наприклад ren або del , для виконання дій над вузлами шляху.

Якщо такий постачальник завантажений, ви можете поводитися з SQLServer так само, як і з диском (літерою).

Тому, швидше за все, десь у вашому коді ви використовувались CDдля переходу до постачальника послуг SQLServer ( cd sqlserver:).

Якби ви хотіли повернутися до d:\thefolderконкретного ви користуєтесь cd d:\thefolder.

Якщо ви хочете повернутися туди, де ви почали, коли закінчите, вам, ймовірно, доведеться зберегти поточне розташування каталогів у змінну a на початку сценарію, а потім використовувати його cdв кінці сценарію, щоб повернутися до цього оригінальний каталог.

Або ви можете, як запропонував @ alroc's у своєму коментарі, використовувати push-locationі pop-locationcmdlets для зберігання та отримання поточного місцезнаходження.


3
Вам не доведеться зберігати поточну директорію до змінної; використовуйте push-locationперед імпортом sqlpsі pop-locationпісля імпорту, і ви готові йти.
alroc

@alroc Я подумав, що, мабуть, щось подібне, але я цього не знав. :) Зручно.
Ƭᴇcʜιᴇ007

7

це, здається, працює для мене:

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

1

Просто введіть C:командний рядок, щоб повернутися до звичайного (наприклад, C: \>).

Тільки для інформації, що, можливо, викликало підказку SMO (тобто PS SQLSERVER:> ) із звичайного запиту C: \> ) - це коли ви завантажуєте збірку SMO без Out-Null (out-null пригнічує результат, повернений командлетом ).

Іншими словами, щоб уникнути ненавмисного підходу до SMO під час завантаження збірки SMO, просто переведіть Out-Null як нижче:

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

Оскільки Microsoft застаріло з методом LoadWithPartialName () , замість цього використовуйте Add-Type :

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

Примітка: щоб отримати шлях до вашої збірки / dll - використовуйте метод GetAssemblies (), як показано нижче:

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

HTH.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.