2014-06-11 14 views
20

Sto scrivendo uno script in PowerShell ISE e sto usando Invoke-Sqlcmd. Dopo l'esecuzione del comando, la sessione di Powershell passa alla sessione sqlps (PS SQLSERVER:>) e non riesco a eseguire lo script per la seconda volta. Devo uscire da PowerShell ISE e riavviarlo.PowerShell Invoke-Sqlcmd passa alla sessione sqlps

Quindi la mia domanda è: come passare da sqlps a ps regolare o come impedire Invoke-Sqlcmd dalla sessione di commutazione.

Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password -InputFile $file ` 
    -ErrorAction Stop -OutputSqlErrors $true -Variable $variable 

Questo non funziona: il comportamento

Push-Location 
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password -InputFile $file ` 
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable 
Pop-Location 

risposta

32

del modulo sqlps è quello di rimanere in psdrive che esso crea. Sono abbastanza sicuro che la gente abbia chiesto a Microsoft di risolvere questo problema, in quanto è molto fastidioso e dirompente.

L'importazione automatica di moduli introdotti da PowerShell 3.0 lo rende ancora più fastidioso, perché non si può nemmeno rendersi conto che si sta importando il modulo fino a dopo il fatto.

Quando uso sqlps, ho esplicitamente importare in modo che posso controllare la mia directory di lavoro come segue:

push-location 
import-module sqlps -disablenamechecking 
pop-location 

Questo consente di tornare alla directory precedente dopo che il modulo è stato caricato.

Molto tardi edit: Con l'avvento di SQL Server Management Studio 2016 abbiamo un nuovo modulo PowerShell, sqlserver, che sostituisce sqlps e risolve questo problema.

+0

Non sto importando il modulo esplicitamente. Sto solo usando Invoke-Sqlcmd. Ho provato con push-location e non funziona: – scar80

+0

Ora ha funzionato. La soluzione è usare lo snippet fornito da @alroc per importare il modulo sqlps. E dopo basta usare Invole-Sqlcmd senza alcuna posizione push. – scar80

+0

Sia che lo si faccia implicitamente (importazione automatica) o esplicitamente, si sta ancora importando quel modulo, che causa questo comportamento. – alroc

2

Un semplice cd vi metterà di nuovo a la directory in cui vi erano in

PS SQLSERVER:\> cd D: 

Risultato:.

PS D:\>