11

Я немного новичок PowerShell.

Итак, я создал скрипт, который использует Restore-SqlDatabase . Однако после того, как я запустил его, он оставляет Powershell в другом состоянии.

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

Как я могу вернуть Powershell обратно в "нормальный" интерфейс?

Кроме того, как называется префикс PS SQLSERVER ? Я попытался Google для этого и пришел пустым.

3 ответа3

19

Из статьи MS SQL Server PowerShell

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

Наличие такого провайдера, как этот, позволяет вам обращаться с SQLServer так же, как с диском (буквой).

Поэтому, скорее всего, где-то в вашем коде вы использовали CD для перехода к поставщику SQLServer (cd sqlserver: .

Если вы хотите вернуться к d:\thefolder частности, вы бы использовали cd d:\thefolder .

Если вы хотите вернуться туда, где вы начали, когда закончите, то вам, вероятно, придется сохранить текущее местоположение каталога в переменной в начале скрипта, а затем использовать его с cd в конце скрипта, чтобы вернуться обратно к этот оригинальный каталог.

Или вы можете, как предложено @ alroc's в его комментарии, использовать командлеты push-location и pop-location для сохранения и получения текущего местоположения.

5

это, кажется, работает для меня:

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'}

НТН.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .