lupora
Goto Top

Mit Powershell Daten über Netzwerke kopieren (Credentials?)

Hallo Experten,

ich habe ein Powershell Script was zyklisch Daten von einem Netzlaufwerk abholt und auf einen anderen Netzlaufwerk schreibt.
Das Script soll mit Windows Task Scheduler alle 2h ausgeführt werden.

Problem: Einer der Netzwerkpfade benötigt Credentials. Das Script wird im Task Scheduler im "Run wheter user is logged in or not" ausgeführt.
Damit muss im Script die Authentifizierung abgebildet werden, da die Netzwerkmappings erst initialisiert werden, wenn der User sich einloggt.

Warum klappt folgendes Vorgehen nicht?

[STRING] $quelle = "C:\Users\admin\Desktop\test"  
[STRING] $ziel = "\\server\e\folder"  

net use \\server\e\folder passwort /USER:de\admin

Copy-Item -Path $quelle\* -Destination $ziel -Recurse -verbose

Er sagt immer "not authorized". Wenn ich nur die Scriptzeile mit net use ausführe, passt alles.

Ich hab auch schon damit rumprobiert, ging auch nicht. Was mach ich falsch? :/

$secpasswd = ConvertTo-SecureString "passwortxxxx" -AsPlainText -Force  
$mycreds = New-Object System.Management.Automation.PSCredential ("de\admin", $secpasswd)  
New-PSDrive –Name "R" –PSProvider FileSystem –Root "\\server\e\folder" -Credential $mycreds  

[STRING] $quelle = "C:\Users\admin\Desktop\test"  
[STRING] $ziel = "R:\"  

Copy-Item -Path $quelle\* -Destination $ziel -Recurse -verbose

Content-ID: 647111

Url: https://administrator.de/contentid/647111

Ausgedruckt am: 25.11.2024 um 07:11 Uhr

Th0mKa
Th0mKa 02.02.2021 um 21:58:14 Uhr
Goto Top
Moin,

Warum benutzt du net use in einem Powershell Script? New-PSDrive wäre wohl eher der Weg.

/Thomas
mayho33
mayho33 03.02.2021 um 01:31:48 Uhr
Goto Top
Also ich würde mir einen Service-User anlegen der auf den entsprechenden Shares Rechte hat.

Dann würde ich im Taskplaner mit diesem User einen Task mit Robocopy anlegen.

Fertig!
Lupora
Lupora 03.02.2021 um 05:39:20 Uhr
Goto Top
Oben hatte ich auch ein ps drive Beispiel dabei. Hat aber nicht geklappt :/
Lupora
Lupora 03.02.2021 um 05:44:49 Uhr
Goto Top
Danke für den Vorschlag. Mit Service User anlegen klappt leider nicht, da ich leider nur mit viel Prozess Aufwand Netzwerk User einrichten lassen kann.
Doskias
Doskias 03.02.2021 um 08:11:02 Uhr
Goto Top
Moin,

also ich gehe mal davon aus, dass du mit dem admin, den du hier nutzt, auch wirklich Zugriff auf beide Ordner hast. Warum dann überhaupt an der Stelle mit Credentials arbeiten? Wenn das Skript alle 2 Stunden im Taskplaner laufen soll, dann musst du ja in dem Skript das Kennwort mitgeben. Das finde ich persönlich immer unschön. Wenn sich das Kennwort ändert, dann musst du das Skript ja ohnehin anpassen. Meine Idee:

Lass die Credentials im Skript weg und führe das Skript explizit als Administrator aus, also in dem Bereich Beim ausführen der Aufgabe folgendes Benutzerkonto verwenden. Wenn du hier die Credentials das Admins hinterlegst, der auf Beide Pfade Zugriff hat, dann funktioniert es auch ohne Credentials im Skript. Aber Achtung: Du kannst dann nur lokale Pfade oder UNC-Pfade verwenden. R:\ wird nicht funktionieren, da es dann in dem Moment nicht gemappt sein wird. Da muss dann der Serverpfad hin. Und ja, auch hier must du dran denken das Kennwort zu ändern, aber ob du es jetzt in der Aufgabe änderst oder im Skript ist der gleiche Aufwand. Ich persönlich habe einige solcher Skripte laufen und damit ich es nicht vergesse auf jedem Server noch ein Skript, was prüft ob eine geplante Aufgabe nicht ausgeführt werden konnte und eine Mail schickt (Braucht keine Berechtigungen und schlägt daher nicht fehl). Vorteil: Wenn das Kennwort im Skript falsch ist, dann wird die Aufgabe erfolgreich ausgeführt. Wenn nicht explizit angegeben wirst du keine Benachrichtigung bekommen. Wenn das Kennwort im Taskplaner falsch ist, meckert der Taskplaner, dass der Job nicht ausgeführt werden konnte und du bekommst mit, dass der Job nicht läuft.

Gruß
Doskias
Lupora
Lupora 03.02.2021 um 09:25:16 Uhr
Goto Top
Hallo Doskias,

das Problem ist eben genau das der Admin nicht Zugriff auf beide Netzlaufwerke hat.
Deswegen arbeite ich ja mit Credentials. Es ist ein Netzlaufwerk der nicht "Unter meiner Kontrolle" ist.
Ich habe nur die Credentials bekommen.

Ich finde Foren voll von Leuten die Problemen mit diesen Credentials haben.
Wenn ich das Script regulär in der ISE ausführe klappt es bestens. Starte ich es im Task Planner klappt es nicht.
Immer unauthorized als Fehler :/
Lupora
Lupora 03.02.2021 um 10:00:26 Uhr
Goto Top
Hinweis, habe mal via Transcript reingeschaut. Das ist die Fehlermeldung:

PS>TerminatingError(New-PSDrive): "A positional parameter cannot be found that accepts argument 'is'."  
New-PSDrive : A positional parameter cannot be found that accepts argument 'is'.  
At C:\Powershell_X\Skript1.ps1:13 char:1
+ New-PSDrive –Name "Q" –PSProvider "FileSystem" –Root "\\server\..... ...  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-PSDrive], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewPSDriveCommand
New-PSDrive : A positional parameter cannot be found that accepts argument 'is'.  
At C:\Powershell_Sebastian\Copy_Sebastian_ZLaufwerk.ps1:13 char:1
+ New-PSDrive –Name "Q" –PSProvider "FileSystem" –Root "\\server\..... ...  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-PSDrive], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewPSDriv
   eCommand
Doskias
Doskias 03.02.2021 aktualisiert um 10:11:39 Uhr
Goto Top
Zitat von @Lupora:
das Problem ist eben genau das der Admin nicht Zugriff auf beide Netzlaufwerke hat.
Ah ok. Das hatte ich so nicht direkt verstanden

Deswegen arbeite ich ja mit Credentials. Es ist ein Netzlaufwerk der nicht "Unter meiner Kontrolle" ist.
Ich habe nur die Credentials bekommen.
Ich bin immernoch kein Fan davon das Kennwort in das Skript zu schreiben. Wie du sagst hast du das Kennwort bekommen, also sollte das bei dir bleiben und hat im Skript nichts zu suchen.

Ich finde Foren voll von Leuten die Problemen mit diesen Credentials haben.
Wenn ich das Script regulär in der ISE ausführe klappt es bestens. Starte ich es im Task Planner klappt es nicht.
Immer unauthorized als Fehler :/

Wie wird das Skript denn gestartet? Hast du mal folgendes versucht:
 powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File \\path\to\script.ps1 

Noch eine Frage: Aus ISE geht, aus Taskplaner nicht. Was passiert wenn du das Skript manuell (ohne ISE und ohne Taskplaner) ausführst?
147323
147323 03.02.2021 aktualisiert um 11:00:48 Uhr
Goto Top
New-PSDrive –Name "Q" –PSProvider "FileSystem" –Root "\\server\..... ...
Die Fehlermeldung ist eindeutig und man sieht auch schon woran es liegt! Du hast die führenden "Gedankenstriche" statt Bindestriche der Parameter offensichtlich aus dem Web kopiert ... Deswegen gibt es Datenmüll welchen die PS natürlich nicht verzeiht.
Mit Copy n' Paste lernt man eben nicht wirklich viel.