Powershell Pfade Kopieren

Retsam-Master

Banned
Registriert
Jan. 2019
Beiträge
1.100
Hallo Leute

Ja ich und das Powershell... aber wer nicht versucht der wird es nicht schaffen :D

Ich hab folgendes geschrieben und bekomme einen leeren Inhalt und weis nicht was ich falsch gemacht habe:
PowerShell:
$test = Get-ChildItem C:\Users\MyUser\Desktop\*.txt | foreach-object {$content = Get-ChildItem -directory C:\Users\MyUser\Desktop\*.txt}
Was ich möchte: das $content den Inhalt hat: Für jede Datei den Pfad gelistet
=
C:\Users\MyUser\Desktop\Datei1.txt
C:\Users\MyUser\Desktop\Datei2.txt
C:\Users\MyUser\Desktop\Datei3.txt

(dies möchte ich später noch mit Datum erweitern aber das möchte ich gerne selber versuchen)
 
$test = Get-ChildItem C:\Users\MyUser\Desktop\*.txt | foreach-object {$_.FullName}

Denn: du hast durch die Foreach-Schleife bereits bei jedem File das Namesobjekt in "$_" drinstehen. ".Name" ist nur die Datei und ".FullName" ist inkl. Pfad.
 
Warum auch immer das $test davor ist...

PowerShell:
$content = (Get-ChildItem -Path *path* -Filter *.txt).FullName
 
In $test will er die Dateien + Pfad haben ... ich versteh nicht, warum er $content braucht.
 
okay... etwas was ich wohl nicht verstehe
1. danke allen.
2. wo ist der Unterschied zwischen $ und $_? und wie verwende ich $?

@d2boxSteve
versteh ich auch nicht, ich habs mal so versucht wie ich es für richtig gehalten hab :heul:

ich meld mich gleich nomma und versuch nun das Datum zu ergänzen (hoffe es klappt)
Ergänzung ()

Ohhh @d2boxSteve
Bei deiner variante ist auch nur alles leer und ohne Inhalt
Ergänzung ()

@sal099
deine Variante scheint zu funktionieren :)
hier versuch ich nun den Filter ein zu bauen
 
Zuletzt bearbeitet:
Also bei mir funktionierts, du musst nen Tippfehler haben:

PS C:\Users\steve> $test = Get-ChildItem C:\Users\steve\Desktop\Test\*.txt | foreach-object {$_.FullName}
PS C:\Users\steve> $test
C:\Users\steve\Desktop\Test\erste.txt
C:\Users\steve\Desktop\Test\nocheins.txt
PS C:\Users\steve>

Ergänzung ()

PS: zu $_ : Innerhalb einer Schleife um eine Ansammlung von Objekten ist das aktuelle Objekt des Schleifendurchlaufs immer in $_ enthalten.

Wenn das eine Sammling von Strings ist kannst du einfach Write-Host $_ machen um den Inhalt zu schreiben.
Ist es wie in deinem Fall ein Datei-Objekt, dann kannst du alle Properties dieses Objekts auch an $_ verwenden (wie z.B. .Name oder .FullName).
Welche Elemente ein Objekt hat kannst du für deinen Fall z.B. mit folgendem Befehl anschaun (du musst halt eine einzelne Datei bei dir angeben die existiert):

Get-ChildItem C:\Users\steve\Desktop\Test\erste.txt | Get-Member

Ergebnis ist eine Liste von Properties die du verwenden kannst.
Ergänzung ()

Der Unterschied ist, das Dollar alleine gibts nicht, das ist hier im Forum ein Problem ohne Script-Tag, der verschluckt das _ gerne und macht stattdessen kursiv .... es muss immer "Dollar-Unterstrich" sein.
 
Zuletzt bearbeitet:
@d2boxSteve
Vielen dank für die erläuterung, wird mir in Zukunft 100%ig helfen und ich hoffe ich kann es auch umsetzen.

Mein Erfolg sieht wie folgt aus:
PowerShell:
$Path = (Get-ChildItem -Path C:\Users\MyUser\Desktop | Where-Object {$_.Extension -eq ".txt" `
-and $_.LastWriteTime - [DateTime]::Now.AddDays( -5 ) -ge 0
}).FullName
Write-Host $Path
Hat nun für mich funktioniert

Was ich nicht verstehe warum beim Pfad sowas nicht geht %userprofile%?!
 
Umgebungsvariablen bekommst du bei der Powershell mit $env:

Also in dem Fall $env:USERPROFILE
 
Genau, bei Powershell ist die Syntax nur etwas anders für die Umgebungsvariablen.
 
Retsam-Master schrieb:
Was ich nicht verstehe warum beim Pfad sowas nicht geht %userprofile%?!
PowerShell:
$Path = (Get-ChildItem -Path "$Home\Desktop" [...]

# $Path wäre dann bei dir:
# 'C:\Users\MyUser\Desktop'
 
schon krass...
mann fragt 10 Leute etwas über Powershell und es gitb sooooooo viele Möglichkeiten das immer was anderes bei raus kommt.
PS danke für die Erläuterung der einzelnen Begriffe, verstehe langsam mehr und mehr.

Kleine Frage zu dem Skript von mir oben das ja so funtkioniert.
Wen ich mir das nun Automatisch per Mail zukommen lasse, ist es sehr unübersichtlich.
Ist es irgendwie möglich nach jeder Variable ein "enter" rein zu machen?
das heisst das es gelistet kommt?
momentan ist es so:
\\path\hier\text.txt \\path\hier\text2.txt \\patch\hier\text3.txt usw.
ich will es so:
\\path\hier\text.txt
\\path\hier\text2.txt
....
 
und wieder mal ...

1. Google Suche "powershell mutliline"
2. Antwort: space + backticks, d.h.

PowerShell:
zeile1 `
zeile2 `
...
 
Retsam-Master schrieb:
Ist es irgendwie möglich nach jeder Variable ein "enter" rein zu machen?
das heisst das es gelistet kommt?
momentan ist es so:
\\path\hier\text.txt \\path\hier\text2.txt \\patch\hier\text3.txt usw.
ich will es so:
\\path\hier\text.txt
\\path\hier\text2.txt

Probiere es so, funktioniert bei mir:
PowerShell:
$WantedFiles = @()
$Path = (Get-ChildItem -Path "$Home\Desktop" -Recurse | Where-Object {$_.Extension -Eq ".txt" `
-And $_.LastWriteTime - [DateTime]::Now.AddDays( -5 ) -And $_.Length -Ge 0
}).FullName
$WantedFiles += $Path | Out-String
Write-Host "$WantedFiles"

Wenn du nur die Namen der Textdateien haben willst, ohne die Verzeichnisse, dann einfach statt ".FullName" ".Name", oder ".BaseName" verwenden.

PowerShell:
$WantedFiles = @()
$Path = (Get-ChildItem -Path "$Home\Desktop" -Recurse | Where-Object {$_.Extension -Eq ".txt" `
-And $_.LastWriteTime - [DateTime]::Now.AddDays( -5 ) -And $_.Length -Ge 0
}).Name
$WantedFiles += $Path | Out-String
Write-Host "$WantedFiles"
 
Zuletzt bearbeitet von einem Moderator:
@abcddcba
@Micha45

Ich sehe eher das Problem in der Einschränkung der Formatierung beim versenden der Mail.
exportiere ich das Ergebnis in ein txt File, sind alle Daten wie gewollt.
 
Ok, aber das hat doch nix mehr mti dem Skript resp. Powershell zu tun, oder verstehe ich hier was falsch? Das liegt doch jetzt an deinem EMail Client, wie der die Daten formattiert und ob er sich als solche versendet oder nur als Plain-Text.
 
@abcddcba
Dochdoch....
Das Mail versende ich ja per Powershell.
Und wen ich in Powershell den Parameter -body "$path" eingebe, wird ja dementsprechend nichts formatiert
Da er hier keine Formatierung kennt.
Müsste ich jetzt tatsächlich einen kompletten Umweg in html oder so machen?
 
Muss das ein gueltige HTML Mail werden? Ansonsten sollte doch -body "<pre>$path</pre>" reichen? :D
Falls die
 
Zurück
Oben