Preso no sqlserver Powershell

11

Eu sou um novato do powershell.

Então, criei um script que usa o Restore-SqlDatabase commandlet. 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 devolver o Powershell à interface "normal"?

Além disso, qual é o prefixo PS SQLSERVER ? Eu tentei o Google para isso e surgiu vazio.

    
por Nathan Koop 11.06.2014 / 15:56

3 respostas

19

Do artigo da MS SQL Server PowerShell

•A SQL Server provider, which enables a simple navigation mechanism similar to file system paths. You can build paths similar to file system paths, where the drive is associated with a SQL Server management object model, and the nodes are based on the object model classes. You can then use familiar commands such as cd and dir to navigate the paths similar to the way you navigate folders in a command prompt window. You can use other commands, such as ren or del, to perform actions on the nodes in the path.

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

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

Se você quiser voltar para d:\thefolder especificamente, use cd d:\thefolder .

Se você quiser retornar para onde começou quando terminar, provavelmente terá que armazenar o local do diretório atual em uma variável no início do script e usá-lo com cd no final do script. script para voltar ao diretório original.

Ou você poderia, como sugerido por @ alroc em seu comentário, usar o push-location e pop-location cmdlets para armazenar e recuperar o local atual.

    
por 11.06.2014 / 16:20
5

isso parece funcionar para mim:

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSqlCmd.sql" | out-null
    
por 05.11.2015 / 11:24
1

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

Apenas para obter informações, o que pode ter acionado o prompt do SMO (ou seja, PS SQLSERVER: ) do normal C: \ > / em> prompt), é 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 acidentalmente no prompt do SMO ao carregar o conjunto do SMO, simplesmente canalize o Out-Null como abaixo:

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

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

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

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

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

HTH.

    
por 10.05.2018 / 11:59

Tags