Benutzer mit den meisten Antworten
FTP-Upload mit gespeicherten Credentials

Frage
-
Hi Leute,
ich möchte Daten per FTP hochladen und den Benutzernamen + Kennwort in einer Datei speichert.
Hierzu habe ich folgendes Skript im Netz gefunden, welches den eingegebenen Benutzernamen und Kennwort in einer Datei speichert:
Param ( [String]$AuthUser = $env:USERNAME, [String]$PathToCred = "d:\Skripte" ) $File = $PathToCred + "\Credentials-$AuthUser.crd" If (-not (Test-Path $File)) { (Get-Credential).Password | ConvertFrom-SecureString | Set-Content $File }
Auf diese Zugangsdaten möchte ich jetzt in meinem FTP-Upload-Skript zugreifen:
#we specify the directory where all files that we want to upload $dirs= @("D:/Backup", "D:/Filesbackup") #ftp server $ftp = "ftp://xxxxxxxxxxxxx/" $Credfile = "d:\Skripte\Credentials-myuser.crd" $Password = Get-Content $Credfile | ConvertTo-SecureString $cred = New-Object System.Management.Automation.PsCredential($AuthUser,$Password) #System.Net.NetworkCredential $networkCredential = (System.Net.NetworkCredential) $cred $webclient = New-Object System.Net.WebClient $webclient.Credentials = New-Object System.Net.NetworkCredential($cred.UserName, $cred.Password) foreach ($dir in $dirs) { #list every sql server trace file foreach($item in (dir $dir "*.*")){ "Uploading $item..." $uri = New-Object System.Uri($ftp+$item.Name) $webclient.UploadFile($uri, $item.FullName) } }
Das ganze klappt aber nicht, weil die Anmeldung an den FTP-Server nicht funktioniert. Habt Ihr eine Idee wieso?
Ausnahme beim Aufrufen von "UploadFile" mit 2 Argument(en): "Der Remoteserver hat einen Fehler zurückgegeben: (530) Nicht angemeldet." In D:\Skripte\ftpupload.ps1:21 Zeichen:9 + $webclient.UploadFile($uri, $item.FullName) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : WebException
Viele Grüße
Markus
Antworten
-
Hallo,
ich vermute das Problem ist das $cred.Password nicht das Passwort in klar Text zurück gibt, sondern System.Security.SecureString.
Versuch mal folgendes:
$webclient.Credentials = New-Object System.Net.NetworkCredential($cred.UserName, $cred.GetNetworkCredential().Password)
Hab leider keinen FTP Server bei der Hand, daher kann ich es nicht testen!
Lg
- Als Antwort markiert Markus335 Dienstag, 19. Januar 2016 19:45
Alle Antworten
-
Hallo,
ich vermute das Problem ist das $cred.Password nicht das Passwort in klar Text zurück gibt, sondern System.Security.SecureString.
Versuch mal folgendes:
$webclient.Credentials = New-Object System.Net.NetworkCredential($cred.UserName, $cred.GetNetworkCredential().Password)
Hab leider keinen FTP Server bei der Hand, daher kann ich es nicht testen!
Lg
- Als Antwort markiert Markus335 Dienstag, 19. Januar 2016 19:45
-
Hi,
hab das bei mir so gelöst:
$FTPHost = ftp://ftp.domain.tld $username = "Der Benutzername" $password = cat C:\cred.txt | convertto-securestring $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
Gruß
Christian
Christian Groebner MVP Forefront
-
Danke für Eure Hilfe, ich habe es hinbekommen :)
Jetzt habe ich nur noch eine Frage. Ich möchte alle Dateien hochladen die sich seit gestern geändert haben:
$1TagAlt = (Get-Date).AddDays(-1) foreach ($dir in $dirs) { foreach($item in (dir $dir "*.*")){ if ( test-path $item.FullName ) { if ( (get-item $item.FullName).LastWriteTime -gt $1TagAlt) { "Uploading $item..." $uri = New-Object System.Uri($ftp+$item.Name) $webclient.UploadFile($uri, $item.FullName) } } } }
Ist das so korrekt? Die Schleife scheint nur eine Datei zu durchlaufen, obwohl 20 vorhanden sind.
Danke & Gruß Markus