Preso no sqlserver do Powershell

14

Eu sou um novato em PowerShell.

Então, eu criei um script que usa o Restore-SqlDatabasecommandlet. No entanto, depois de executá-lo, ele deixa o Powershell em um estado diferente.

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

Como posso retornar o Powershell de volta à interface "normal"?

Além disso, como é PS SQLSERVERchamado o prefixo? Tentei procurar no Google por isso e fiquei vazio.

Nathan Koop
fonte

Respostas:

21

Do artigo da MS SQL Server PowerShell

• Um provedor do SQL Server, que permite um mecanismo de navegação simples semelhante aos caminhos do sistema de arquivos. Você pode criar caminhos semelhantes aos do sistema de arquivos, nos quais a unidade está associada a um modelo de objeto de gerenciamento do SQL Server e os nós são baseados nas classes de modelo de objeto. Em seguida, você pode usar comandos familiares, como cd e dir, para navegar pelos caminhos semelhantes à maneira como navega nas pastas em uma janela do prompt de comando. Você pode usar outros comandos, como ren ou del , para executar ações nos nós no caminho.

Ter um provedor como este carregado permite tratar o SQLServer da mesma maneira que trataria uma unidade (letra).

Então, provavelmente em algum lugar do seu código que você usou CDpara se mudar para o provedor SQLServer ( cd sqlserver:).

Se você quisesse voltar d:\thefolderespecificamente, usaria cd d:\thefolder.

Se você quiser retornar ao local em que iniciou, provavelmente precisará armazenar o local do diretório atual em uma variável no início do script e usá-lo cdno final do script para voltar a esse ponto. diretório original.

Ou você pode, como sugerido por @ alroc's em seu comentário, usar os cmdlets push-locatione pop-locationpara armazenar e recuperar o local atual.

Ƭᴇcʜιᴇ007
fonte
3
Você não precisa salvar o diretório atual em uma variável; use push-locationantes sqlpse pop-locationdepois da importação e pronto.
alroc
@ alroc Imaginei que provavelmente havia algo assim, mas eu não estava ciente disso. :) Handy.
Ƭᴇcʜιᴇ007
7

isso parece funcionar para mim:

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

Basta digitar C:no prompt de comando para voltar ao prompt usual (por exemplo, C: \>).

Apenas para obter informações, o que pode ter acionado o prompt do SMO (ou seja, PS SQLSERVER:> ) do prompt C: \> normal ) é quando você carrega o assembly SMO sem o Out-Null (out-null) suprime a saída retornada pelo cmdlet )

Em outras palavras, para evitar entrar inadvertidamente no prompt do SMO ao carregar o conjunto do SMO, basta canalizar o Out-Null como abaixo:

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

Como a Microsoft descontinuou o método LoadWithPartialName () , use o Add-Type :

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

Nota: para obter o caminho para o seu assembly / dll - use o método GetAssemblies () como abaixo:

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

HTH.

Eddie Kumar
fonte