Powershell Pfade Kopieren

Retsam-Master

Cadet 4th Year
Dabei seit
Jan. 2019
Beiträge
105
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)
 

d2boxSteve

Commander
Dabei seit
Apr. 2010
Beiträge
2.662
$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.
 

sal099

Cadet 2nd Year
Dabei seit
Aug. 2009
Beiträge
30
Warum auch immer das $test davor ist...

PowerShell:
$content = (Get-ChildItem -Path *path* -Filter *.txt).FullName
 

d2boxSteve

Commander
Dabei seit
Apr. 2010
Beiträge
2.662
In $test will er die Dateien + Pfad haben ... ich versteh nicht, warum er $content braucht.
 

Retsam-Master

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Jan. 2019
Beiträge
105
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:

d2boxSteve

Commander
Dabei seit
Apr. 2010
Beiträge
2.662
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:

Retsam-Master

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Jan. 2019
Beiträge
105
@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%?!
 

sal099

Cadet 2nd Year
Dabei seit
Aug. 2009
Beiträge
30
Umgebungsvariablen bekommst du bei der Powershell mit $env:

Also in dem Fall $env:USERPROFILE
 

d2boxSteve

Commander
Dabei seit
Apr. 2010
Beiträge
2.662
Genau, bei Powershell ist die Syntax nur etwas anders für die Umgebungsvariablen.
 

Retsam-Master

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Jan. 2019
Beiträge
105
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
....
 

abcddcba

Lieutenant
Dabei seit
Juni 2018
Beiträge
522
und wieder mal ...

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

PowerShell:
zeile1 `
zeile2 `
...
 

Micha45

Lt. Commander
Dabei seit
Mai 2009
Beiträge
1.690
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:

abcddcba

Lieutenant
Dabei seit
Juni 2018
Beiträge
522
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.
 

Retsam-Master

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Jan. 2019
Beiträge
105
@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?
 

r15ch13

Lieutenant
Dabei seit
Dez. 2003
Beiträge
747
Muss das ein gueltige HTML Mail werden? Ansonsten sollte doch -body "<pre>$path</pre>" reichen? :D
Falls die
 
Top