herrtaler
Goto Top

Powershell - Module PsFTP - recursive Abfrage

Ich möchte gerne mit Powershell alle Dateien und Verzeichnisse in einem FTP-Pfad auflisten. Ich habe das mit dem Module PsFTP versucht Quelle: (http://gallery.technet.microsoft.com/scriptcenter/PowerShell-FTP-Client ..) funktioniert bei mir der -recurse Parameter nicht.

Hat von euch schon mal einer mit dem Modul gearbeitet? Benutze ich den Parameter falsch?

Das ist mein Script:
Import-Module PsFTP
$password = ConvertTo-SecureString kennwort -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential user, $Password
Set-FTPConnection -Credentials $Credentials -Server 10.1.4.117
get-FTPChilditem -path /test -Recurse # So geht es nicht
#get-FTPChilditem -path /test # So geht es aber eben nicht mit Unterverzeichnissen
Fehlermeldung:
Get-FTPChildItem : "Die Länge darf nicht kleiner als 0 (null) sein.  
Parametername: lengt
Bei C:\Scripts\_Vorlage\ftp2.ps1:59 Zeichen:17
+ get-FTPChilditem <<<<  -path /test -Recurse
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-FTPChildItem
Danke für eure Hilfe
Gruß
Herr Taler

Content-Key: 189628

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: refLye
refLye Jul 20, 2015 updated at 12:36:17 (UTC)
Goto Top
Hallo,

du benutzt es richtig - Der "-Recurse"-Schalter geht bei mir auch nicht. Nur für die Passwort-Geschichte gibt es einen Weg, der etwas sicherer ist. Erkläre ich gleich.

Bei mir geht folgende Zeile:

(Get-FTPChildItem -Path "myrootdir") | Where-Object { $_.Dir -eq "d" } | ForEach-Object { Get-FTPChildItem -Path "myrootdir/$($_.Name)" } | out-gridview  

Er liest alle ChildItems aus dem myrootdir-Verzeichnis aus, die als Eigenschaft "Dir" ein "d" gesetzt haben - das trifft nur für Ordner zu. Dann liest er nacheinander für jeden dieser Ordner die ChildItems aus. Kannst du damit schon etwas anfangen?

---

Etwas zur Sicherheit: wenn ich meinen Administrator-Login benötige (automatisch, ohne Passwort-Eingabe), dann gehe ich diesen Weg:

$SecureStringFile = "path\to\creds.txt"  
$SecureKey = (3,4,2,3,6,2,1,1,2,3,2,4,3,1,4,2)

$Credential_UserName = "domain\username"  
$Credential_Password = Get-Content $SecureStringFile | ConvertTo-SecureString -Key $SecureKey
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Credential_UserName, $Credential_Password

Die creds.txt enthält eine "wirre" Folge von Ziffern und Buchstaben:

76492d1116743f042341[...]AMQBlAGUAYgAxADMAZAA=

Erzeugt habe ich diese Datei mit folgenden Zeilen:

$SecureKey = (3,4,2,3,6,2,1,1,2,3,2,4,3,1,4,2)
$SecureCred = Read-Host -prompt "Bitte Passwort für $file angeben:" -AsSecureString  
$SecureCred | ConvertFrom-SecureString -key $SecureKey | Set-Content ("c:\temp\creds.txt")  

Man erzeugt aus dem Passwort quasi einen mit $SecureString verschlüsselten Hash, den man im PowerShell-Skript dann nur mit genau diesem Key wieder entschlüsseln kann.