ScheduledTask ohne Windows-Benutzeranmeldung: PowerShell Netzlaufwerk lässt sich nicht verbinden
Hallo,
ich habe auf einem Win 10 Ent. Host (HyperV) in einer Domäne über den TaskPlanner bzw. Aufgabenplanung erfolgreich ein Powershell Script laufen, welches über ein externen SMB3 Laufwerk (Strato HiDrive) Ordner auf bestimmte Inhalte prüft (BackUp Kontrolle). Das geprüfte Netzlaufwerk ist über den angemeldeten Benutzer gemapt, somit ist ein Mapping innerhalb des Scripts nicht notwendig.
Leider wird der Host auf Grund von div. Domänen-GPO's auch mal neu gestartet ohne automatische Benutzeranmeldung. Automatische Anmeldung kann wegen der Domänen GPO nicht eingestellt werden (wäre praktisch aber grundsätzlich bei diesem Host erlaubt - geht Auto-Anmeldung per Domänen-GPO, Stichwort Kiosk-PC/Modus? Evt. sekundärer Lösungsweg, primär würd ich gern die PowerShell Lösung). Effekt ist das der ScheduledTask nicht angestosen wird.
Damit das Script auch ohne Windows-Benutzeranmeldung ausgeführt werden kann habe ich es um das Laufwerksmapping und Einstellen des Arbeitsverzeichnisses ergänzt. So hier:
Alternativ funktioniert auch New-PSDrive.
Im Test in der PowerShell ISE läuft das auch alles einwandfrei. Task mit Windows-Benutzeranmeldung geht auch.
Das Problem:
Wenn der Task als Job ohne Windows-Benutzeranmeldung läuft liefert mir das Script ein Log ab, in dem die nicht gefundenen BackUps moniert werden. Anhand der gelisteten Verzeichnisse sehe ich das nicht das Netzlaufwerk, sondern das Windows\System32 Verzeichnis ausgewertet wurde.
Ich habe deshalb probiert das ganze per Admin-gestarteter PowerShell zu testen, da ich da auch autom. im Windows\System32 Verzeichnis arbeite und mich im selben Zustand wie im Task befinde (falscher Lösungsweg?).
Es ist mir aber Schlicht und ergreifend nicht möglich (auf div. Win10 PC's getestet mit/ohne Domäne & verschiedene Netzwerke) das Smb3 Laufwerk zu mappen. Fehler:
New-PSDrive geht auch nicht.
Habe alles mögliche probiert, auch mit Authentifizierung usw., im Test so OK, als Admin scheitere ich immer...
Im Netz gibt es allerhand Lösungen , die aber nicht die Tasks ohne Benutzer-Anmeldung berücksichtigen. ...oder ich suche falsch...
Das muß doch irgendwie machbar sein.... *verzweifel*
Gruß
ich habe auf einem Win 10 Ent. Host (HyperV) in einer Domäne über den TaskPlanner bzw. Aufgabenplanung erfolgreich ein Powershell Script laufen, welches über ein externen SMB3 Laufwerk (Strato HiDrive) Ordner auf bestimmte Inhalte prüft (BackUp Kontrolle). Das geprüfte Netzlaufwerk ist über den angemeldeten Benutzer gemapt, somit ist ein Mapping innerhalb des Scripts nicht notwendig.
Leider wird der Host auf Grund von div. Domänen-GPO's auch mal neu gestartet ohne automatische Benutzeranmeldung. Automatische Anmeldung kann wegen der Domänen GPO nicht eingestellt werden (wäre praktisch aber grundsätzlich bei diesem Host erlaubt - geht Auto-Anmeldung per Domänen-GPO, Stichwort Kiosk-PC/Modus? Evt. sekundärer Lösungsweg, primär würd ich gern die PowerShell Lösung). Effekt ist das der ScheduledTask nicht angestosen wird.
Damit das Script auch ohne Windows-Benutzeranmeldung ausgeführt werden kann habe ich es um das Laufwerksmapping und Einstellen des Arbeitsverzeichnisses ergänzt. So hier:
New-SmbMapping -LocalPath 'X:' -RemotePath '\\%SERVER%\%Freigabe%\%Ordner%'
start-sleep 5
# Arbeitsverzeichnis einstellen
Set-Location 'X:\'
Alternativ funktioniert auch New-PSDrive.
Im Test in der PowerShell ISE läuft das auch alles einwandfrei. Task mit Windows-Benutzeranmeldung geht auch.
Das Problem:
Wenn der Task als Job ohne Windows-Benutzeranmeldung läuft liefert mir das Script ein Log ab, in dem die nicht gefundenen BackUps moniert werden. Anhand der gelisteten Verzeichnisse sehe ich das nicht das Netzlaufwerk, sondern das Windows\System32 Verzeichnis ausgewertet wurde.
Ich habe deshalb probiert das ganze per Admin-gestarteter PowerShell zu testen, da ich da auch autom. im Windows\System32 Verzeichnis arbeite und mich im selben Zustand wie im Task befinde (falscher Lösungsweg?).
Es ist mir aber Schlicht und ergreifend nicht möglich (auf div. Win10 PC's getestet mit/ohne Domäne & verschiedene Netzwerke) das Smb3 Laufwerk zu mappen. Fehler:
New-SmbMapping : Falscher Parameter.
In Zeile:1 Zeichen:1
+ New-SmbMapping -LocalPath 'X:' -RemotePath '\\%Server% ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (MSFT_SmbMapping:ROOT/Microsoft/...MSFT_SmbMapping) [New-SmbMapping], CimException
+ FullyQualifiedErrorId : Windows System Error 87,New-SmbMapping
New-PSDrive geht auch nicht.
Habe alles mögliche probiert, auch mit Authentifizierung usw., im Test so OK, als Admin scheitere ich immer...
Im Netz gibt es allerhand Lösungen , die aber nicht die Tasks ohne Benutzer-Anmeldung berücksichtigen. ...oder ich suche falsch...
Das muß doch irgendwie machbar sein.... *verzweifel*
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 614306
Url: https://administrator.de/contentid/614306
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
9 Kommentare
Neuester Kommentar
'\\%SERVER%\%Freigabe%\%Ordner%'
Erstens werden Variablen in der Powershell mit $variable angesprochen und wenn in Anführungszeichen dann auch nur in Doppelten und nicht in Hochkommas, deswegen geht obige Angabe mit Prozentzeichen nicht das ist Batch-Gedöhns!Zweitens ist ein Mapping überflüssig weil man den Pfad auch so direkt über den UNC Pfad ansprechen kann.
Sicher geht das, da du hier aber offensichtlich ein Share bei einem Hoster via SMB übers Internet ansprichst (war uns leider nicht bekannt) musst du vorher die Credentials für den FQDN auch im Tresor(Anmeldeinformationsverwaltung) desjenigen Users hinterlegen in dessen Kontext auch der Scheduled Task ausgeführt wird sonst fehlen diesem ja logischerweise die Authentifizierungsdaten!
Bedenke auch das bestimmte Principals keinen Netzwerkzugriff haben.
Also mach es richtig dann lüppt dat auch.
Bedenke auch das bestimmte Principals keinen Netzwerkzugriff haben.
Also mach es richtig dann lüppt dat auch.
\\smb3.hidrive.strato.com\Freigabe\Unterordner
Gemappt werden nur freigegebene Shares keine Unterordner! Also im Pfad nur den Server und den Freigabe-Namen angeben, keine weiteren Ordner!\\smb3.hidrive.strato.com\root
https://www.strato.de/faq/cloud-speicher/so-stellen-sie-mit-dem-net-use- ...
https://www.strato.de/faq/cloud-speicher/wie-lauten-die-pfade-zu-ftp-smb ...
Natürlich kann ich mit New-SmbMapping wundervoll alle Unterordner im Share ansteuern und mappen
Dieses spezielle CMDLet kann das, ja das ist richtig, aber genau dieses funktioniert nicht gescheit in elevated Sessions und ist deswegen dafür ungeeignet! Die anderen dafür üblicherweise dafür genutzten Tools erwarten hier aber in der Regel ein Share und kein Subpfad.Lies
https://ss64.com/ps/new-smbmapping.html
This cmdlet should be run at a non-elevated session - the same privilege as Windows Explorer.
Deswegen besser gleich über die Angabe des UNC Pfads arbeiten, funktioniert hier übrigens einwandfrei auch in einer elevated Session, gerade mal mit einem Test-Account bei Strato getestet. Funktioniert wie nicht anders erwartet
Mit cmdkey die Credentials in der elevated Sessions vorher prüfen.
Btw. Ein Skript muss auch nicht zwingend elevated ausgeführt werden um ohne Benutzeranmeldung zu laufen wenn sowieso nur ein paar Pfade geprüft werden.