2012-10-16 9 views
13

Mam dużą bibliotekę istniejących skryptów powershell, głównie do uruchamiania skomplikowanej logiki i interakcji między SQL Server a systemem plików.Moduł SQLP SQL Server 2012 - Automatyczna zmiana bieżącej lokalizacji?

Interakcje SQL są zwykle wykonywane za pomocą polecenia cmdlet Invoke-SQLCmd.

Niedawno SSMS wersja na wszystkich moich serwerów zostało uaktualnione do 2012. To oznaczało, że musiałem dokonać pewnych zmian w kodzie, aby usunąć odwołania do sqlserverprovidersnapin100 i sqlservercmdletsnapin100 ponieważ te są przestarzałe w 2012 roku na rzecz importu modułu SQLPs .

To działało OK, ale wygląda na to, że moduł SQLPs w pewnym momencie zmienia bieżącą lokalizację na PS SQLSERVER> zamiast <local folder>, co powoduje, że wiele innych moich poleceń zawiedzie. Na przykład, jeśli uruchomię dysk Test-Path na dysku sieciowym, działa on dobrze z lokalizacją <local folder>, ale zakończy się niepowodzeniem z lokalizacji SQLSERVER.

Czy to znany problem? Czy istnieje obejście lub ustawienie, które mogę zmienić?

Główny scenariusz, który martwię się, to ponad 1000 linii i działa bez żadnych problemów przez ponad dwa lata, dopóki nie wprowadziliśmy tej zmiany, więc chciałbym uniknąć testowania linii po linii, jeśli mogę .

Odpowiedz

7

Rozwiązałem ten problem, dodając cd <local folder> jako pierwszą linię skryptu do wyrwania dostawcy. Czuje się jednak hackish.

+0

Po prostu dodajesz 'cd ' jako pierwszą linię PO załadowaniu dostawcy? – JNK

+0

Tak, to moja praca. –

+0

Cóż, spróbuję i dam wam znać bardzo krótko! – JNK

23

Nieco więcej informacji o tym, dlaczego w sql 2012 to się zmienia z SQLServer: katalog ...

Kiedy moduł towarów importowanych PowerShell sqlps, manifest definiuje plik skryptu po nazwie SqlPsPostScript.ps1. Ten plik (pierwszy wiersz) zmienia bieżącą lokalizację do SQLSERVER: dostawca

Na pudełku x64 moduł znajduje się - C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ Narzędzia \ PowerShell \ Moduły \ SQLPS .

W programie Power Shell 3.0 automatyczne importowanie może utrudnić określenie, kiedy to nastąpi (z mojego doświadczenia).

Nie jest jasne, dlaczego (z logicznego punktu widzenia) powinien to zrobić. Nie chcemy dotykać modułów serwera SQL, więc domyślam się, że po zaimportowaniu modułu trzeba wykonać jawną lokalizację zestawu. Możesz również spojrzeć na to jako rozwiązanie, które jest nieco mniej hacky.

Push-Location 
Import-Module sqlps 
Pop-Location 
+9

+1 za sugerowanie 'Push-Location; Moduł SQLPS modułu importu; Pop-Location' – Serguei

+0

Pracował dla mnie :) – 1nfected

+0

ps; aby uniknąć ostrzeżeń opisanych tutaj: https: //www.codykonior.com/2015/05/30/whats-wrong-with-sqlps/przekierowuj strumień ostrzegawczy, a następnie anuluj go: 'push-location; import-moduł sqlps 3> & 1 | out-null; pop-location' – JohnLBevan

Powiązane problemy