SQL Server 2012 SQLPs-Modul - Ändern der aktuellen Position automatisch?
Habe ich eine große Bibliothek vorhandene powershell-Skripts, die in Erster Linie einige komplizierte Logik und Interaktionen zwischen SQL Server und Dateisystem.
Den SQL-Interaktionen sind in der Regel durchgeführt durch das cmdlet Invoke-SQLCmd
.
Kürzlich mit dem SSMS-version auf allen meinen Servern wurde aktualisiert auf 2012. Das bedeutete, ich musste einige änderungen vornehmen, um meinen code zu entfernen Verweise auf die sqlserverprovidersnapin100
und sqlservercmdletsnapin100
da diese veraltet sind in 2012 zu Gunsten des Imports von SQLPs
Modul.
Dies funktionierte OK, aber es scheint, dass die SQLPs
Modul ist irgendwann eine änderung der derzeitigen Lage zu PS SQLSERVER>
statt <local folder>
, macht viel anderen meiner Befehle fehlschlägt. Zum Beispiel, wenn ich einen Test-Path
auf einem Netzwerk-Laufwerk, es funktioniert von der <local folder>
Lage aber nicht aus der SQLSERVER
Lage.
Ist das ein bekanntes Problem? Gibt es eine Abhilfe oder Einstellung, die ich ändern kann, für dieser?
Dem Haupt-script-ich bin besorgt ist über 1000 Zeilen, und hat keine Probleme für mehr als zwei Jahre, bis wir diese änderung vorgenommen, so möchte ich es vermeiden, eine Linie von line-test von ihm, wenn ich kann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe dieses problem gelöst, indem ein
cd <local folder>
als erste Zeile in das Skript, um aus den Anbieter.Fühlt hackish obwohl.
cd <folder>
als erste Zeile NACH dem laden der Anbieter?Set-Location
in meine main-Prozedur und es scheint behoben haben!Etwas mehr Informationen, WARUM in sql 2012-es ändert sich an den SQLSERVER: Verzeichnis...
Wenn powershell importiert sqlps-Modul, das manifest definiert eine post script-Datei mit dem Namen SqlPsPostScript.ps1. Diese Datei (erste Zeile) ändert den aktuellen Speicherort in den SQLSERVER: Anbieter
Auf x64-bit-Feld, das Modul liegt - C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS.
In der powershell 3.0 automatisches importieren kann machen es schwierig zu sagen, Wann dies geschehen wird (in meiner Erfahrung).
Seine nicht klar, warum (aus logischer Sicht) sollte es tun. Wir wollen nicht zu berühren, die SQL-server-Module, so dass ich denke, Sie tun müssen, um eine explizite set-location nach dem import des Moduls. Sie könnten auch das ist eine Lösung, die ist ein bisschen weniger hacky.
Push-Location; Import-Module SQLPS; Pop-Location
push-location; import-module sqlps 3>&1 | out-null; pop-location