none
Problem mit New-PSDrive per Skript - Nach Ende des Skripts werden die erstellten Netzlaufwerke direkt wieder gelöscht RRS feed

  • Frage

  • Hallo zusammen,

    ich bin PowerShell Frischling, kam aber mit dem Code bisher ziemlich schnell klar. Nun habe ich allerdings direkt schon mein erstes Problem:

    Folgendes Szenario:

    Ich möchte per Powershell-Skript (dass zu einem späteren Zeitpunkt durch die Aufgabenplanung aufgerufen wird) Netzlaufwerke (auf einem NAS im internen Netzwerk) verbinden.

    Bisher machte ich das per NET USE, was mir aber zwischenzeitlich aus verschiedenen Gründen missfällt. Nun habe ich mich in PowerShell eingearbeitet und eine, wie ich finde, für mich zufriedenstellendes Skript zum Verbinden der Netzlaufwerke erstellt. Dazu werden einmalig die Credentials eingelesen und als xml im Nutzerordner abgelegt. Im Skript soll dann beim Systemstart die xml eingelesen und die Netzlaufwerke per New-PSDrive verbunden werden.

    Und nun zu dem Problem:

    Das Skript funktioniert, wenn ich es Copy&Paste in die Powershell (Version 5.1.14393.576 unter Windows 10) kopiere und abarbeiten lasse. Wenn ich die PowerShell verlasse, bestehen die Netzlaufwerke weiter.

    Es funktioniert ebenfalls, wenn ich das Skript aus PowerShell ISE starte.

    Es kommt allerdings zu einem mir unerklärbaren Effekt, den ich immerhin eingrenzen konnte, wenn ich die Skriptdatei (*.ps1) ausführen lasse: Starte ich das Skript (z. B. per Verknüpfung oder aus einer Batch-Datei), dann wird es sauber abgearbeitet, die Netzlaufwerke bestehen jedoch nur solange, wie das Skript noch aktiv ist. Zum Testen habe ich ein Start-Sleep 30 an mein Skript gehängt...die Netzlaufwerke bleiben exakt für 30 Sekunden verbunden und trennen sich dann wieder (weder in der PowerShell noch im Windows Explorer kann danach auf diese zugegriffen werden). Quasi der gleiche Effekt, wie ein net use * /del /yes.

    Da ich erst mein Skript im Verdacht hatte (diverse Variablen werden übergeben), habe ich es auf ein Minimum reduziert, der Effekt bleibt der gleiche, wenn ich den New-PSDrive Befehl möglichst direkt ausführe. Bei folgendem minimalistischen Skript tritt das Problem also leider bereits auf.

    Minimalskript:

    $pwNew = Get-Credential
    New-PSDrive -name "Z" -psprovider “FileSystem” -Credential $pwNew -root "\\192.168.2.100\Daten" -Persist
    Start-Sleep 20

    Ich starte das Skript derzeit beispielsweise über eine Batch Datei:

    PowerShell.exe -ExecutionPolicy Bypass -Command "& 'C:\Users\Nutzername\Netzlaufwerke\minimal.ps1'"
    pause

    Sonstiges:

    Die Execution Policy hatte ich auf dem PC testweise mal auf unrestricted, was allerdings keine Änderung brachte. Ich denke, wenn es daran liegt, dann dürfte das Skript ja überhaupt nicht starten.

    Gibt es sonstige Sicherheitsbeschränkungen, die den Effekt erklären oder ist mir einfach ein ganz großer Schnitzer unterlaufen? Ich habe zwischenzeitlich sehr viel hier in den Foren und auch per google gesucht, aber leider keinen passenden Hinweis gefunden, der mir weiterhelfen könnte :-(




    • Bearbeitet jvsh Dienstag, 10. Januar 2017 09:27
    Dienstag, 10. Januar 2017 09:20

Antworten

  • Problem gelöst...

    :facepalm:

    Der Code zum Aufrufen per Script/Verknüpfung muss so aussehen:

    PowerShell.exe -ExecutionPolicy Bypass -Command ". 'C:\Users\Nutzername\Netzlaufwerke\minimal.ps1'"
    pause

    also ein . statt & vor dem Pfad zur Skript-Datei...hat also wohl was mit dem Sicherheitsbereich der Variablen (Scope) zu tun. Das dies zu einem so komischen Effekt führt, hätte ich nicht gedacht. Ich dachte, ich hätte die verschiedenen Aufrufe schon ausprobiert, offensichtlich jedoch nicht. Also falls es jemandem weiter hilft, der ein ähnliches Problem hat :-)


    • Als Antwort markiert jvsh Dienstag, 10. Januar 2017 09:42
    • Bearbeitet jvsh Dienstag, 10. Januar 2017 09:47
    Dienstag, 10. Januar 2017 09:42

Alle Antworten

  • Problem gelöst...

    :facepalm:

    Der Code zum Aufrufen per Script/Verknüpfung muss so aussehen:

    PowerShell.exe -ExecutionPolicy Bypass -Command ". 'C:\Users\Nutzername\Netzlaufwerke\minimal.ps1'"
    pause

    also ein . statt & vor dem Pfad zur Skript-Datei...hat also wohl was mit dem Sicherheitsbereich der Variablen (Scope) zu tun. Das dies zu einem so komischen Effekt führt, hätte ich nicht gedacht. Ich dachte, ich hätte die verschiedenen Aufrufe schon ausprobiert, offensichtlich jedoch nicht. Also falls es jemandem weiter hilft, der ein ähnliches Problem hat :-)


    • Als Antwort markiert jvsh Dienstag, 10. Januar 2017 09:42
    • Bearbeitet jvsh Dienstag, 10. Januar 2017 09:47
    Dienstag, 10. Januar 2017 09:42
  • hmmm ... ich finde es immer komisch, dass das für mich Naheliegenste offenbar niemand anders sieht. Warum benutzt keiner den Parameter -File? Der ist dafür gemacht, der Powershell-Konsole eine Skriptdatei mitzugeben, die diese dann ausführt. Oder spricht da irgendwas dagegen?


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 10. Januar 2017 10:04
  • doch, ich ;-)

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Dienstag, 10. Januar 2017 10:05
  • Evgenij,

    danke. Du rückst mein Weltbild dann doch wieder ein Stück gerade.  ;-) :-D


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 10. Januar 2017 10:07
  • BOfH_666:
    > Oder spricht da irgendwas dagegen?
     
    Nein da spricht nichts dagegen. Der Unterschied ist aber auch nicht groß.

    Es sei denn man arbeitet mit Exitcodes, z.B. via "exit <code>", das funktioniert nur vernünftig wenn man über den "-file"-Parameter aufruft.

    Beim Aufruf über "-command" dagegen, ist der Exitcode immer 0 oder 1.

     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 10. Januar 2017 12:38
    Moderator
  • ... das ist ja quasi dann noch ein zusätzlicher Mehrwert. .... und das auch noch ohne Mehraufwand.

    Cool, danke für den Tipp.


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 10. Januar 2017 12:51