schreckinger 10 Geschrieben 22. März 2012 Autor Melden Teilen Geschrieben 22. März 2012 $env:USERPROFILE gibt es da eine Def. die 2 Platten auswählt... sprich C:\ E:\ gibt es dafür ein Wort ? sowie $env:USERPROFILE werden doch auch alle User Profile verwendet ? Danke Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 22. März 2012 Autor Melden Teilen Geschrieben 22. März 2012 Es kommt darauf an was der User eingeben soll.Wenn er den kompletten Pfad eingeben soll geht das mit Test-Path ohne Probleme. Wenn der User z.B. nur einen Ordner, der in seinem Profil liegt eingeben soll (wie in dem Beispiel "sqltest") muss der Anfang ja ergänzt werden. "$env:USERPROFILE" ist das Profil, daran wird (mit +) ein Backslash und danach den zu suchenden Ordner angehängt. Das ganze wird in der Variable $var1 neu geschrieben, die ja für das test-path da ist. Ich möchte nur das der User den Ornder angibt ? Ist es Möglich in sein Script so eine Art Dropdown-Menü Einbauen ? Also das der User den Ornder auswählt ? Würde das ganze checken sparen ob der Ornder wirklich vorhanden ist ? #Backup Tool $var1 = Read-Host "Eingabe des Ornders der gesichert werden soll, achten Sie bitte auf die Richtige Schreibweise" $var1 = $env:USERPROFILE + '\' + $var1 if (Test-Path -Path $var1) { Write-Host "Die Eingabe war korrket." } else{ Write-Host "Der Angebene Ornder exestiert nicht bitte prüfen sie die Schreibweise und achten sie auf Groß/Klein Schreibun" Write-Host "Der Pfad zum Ornder ist nicht Korrekt:"$var1 } $var2 = Read-Host "Eingabe der Ziel Quelle für das Backup:" $var2 = $env:SystemDrive + '\' + $var2 if (Test-Path -Path $var2) { Write-Host "Die Eingabe war Korrekt." Copy-Item -Path $var1 -Destination $var2 -Recurse -Force | Write-Host "Kopiervorgang gestartet dies kann einige Zeit in Anspruch nehmen" Write-Host "Der Kopiervorgang abgeschlossen" } else { Write-Host "Der Angebene Ornder exestiert nicht" Write-Host "Der Pfad zum Ornder von ihrer Eingabe:"$var2 } Das ist zur Zeit mein Script Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 22. März 2012 Melden Teilen Geschrieben 22. März 2012 Du weißt was Environmentsettings sind? Gib einmal get-childitem env: in der Powershellconsole oder set.exe in der cmd.exe ein. Edit: Zu deinem Script: Ich möchte nur das der User den Ornder angibt ? Ist es Möglich in sein Script so eine Art Dropdown-Menü Einbauen ? Also das der User den Ornder auswählt ? Würde das ganze checken sparen ob der Ornder wirklich vorhanden ist ? Fang mit kleinen Dingen an und nicht mit irgendwelchen Guis. #Backup Tool $var1 = Read-Host "Eingabe des Ornders der gesichert werden soll, achten Sie bitte auf die Richtige Schreibweise" $var1 = $env:USERPROFILE + '\' + $var1 if (Test-Path -Path $var1) { Write-Host "Die Eingabe war korrket." } else{ Write-Host "Der Angebene Ornder exestiert nicht bitte prüfen sie die Schreibweise und achten sie auf Groß/Klein Schreibun" Write-Host "Der Pfad zum Ornder ist nicht Korrekt:"$var1 } $var2 = Read-Host "Eingabe der Ziel Quelle für das Backup:" $var2 = $env:SystemDrive + '\' + $var2 if (Test-Path -Path $var2) { Write-Host "Die Eingabe war Korrekt." Copy-Item -Path $var1 -Destination $var2 -Recurse -Force | Write-Host "Kopiervorgang gestartet dies kann einige Zeit in Anspruch nehmen" Write-Host "Der Kopiervorgang abgeschlossen" } else { Write-Host "Der Angebene Ornder exestiert nicht" Write-Host "Der Pfad zum Ornder von ihrer Eingabe:"$var2 } Das ist zur Zeit mein Script Hier kannst du die Abfrage nach dem Zielpfad in das erste if einbauen. Sonst kommt die Frage nach dem Ziel auch wenn die Quelle schon falsch ist. Wieso reicht es nicht, wenn der User den kompletten Pfad eingibt? Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 22. März 2012 Melden Teilen Geschrieben 22. März 2012 PowerShell - Laufwerke, Ordner, Dateien und Freigaben - PowerShellPraxis.de http://www.powershellpraxis.de/My-Powershell.943.0.html#c3960 Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 22. März 2012 Autor Melden Teilen Geschrieben 22. März 2012 hi also den get-help Befehl env: hab ich ausgeführt. Aber mein Problem ist das der jetztige Rechner was ich in der Arbeit verwende nur eine C Platte hat. Aber gibt es so einen Namen für alle Platten wie Drives oder so ? okay das mit den guis schau ich mir später an. Das Problem ist die User sind einfach zu d... ! Um den Pfad Komplett anzugeben. Deswegen auch meine Frage ob es ein Dropdown menü oder irgendsowas in der Art gibt. Gibt es dazu noch eine leichtere möglich ? Wie hast du das Gemeint mit der Abfrage ? Danke nochmal Dukel bist ein Top Mann Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 22. März 2012 Autor Melden Teilen Geschrieben 22. März 2012 PowerShell - Laufwerke, Ordner, Dateien und Freigaben - PowerShellPraxis.de PowerShell My Powershell - PowerShellPraxis.de Danke für den Link... hab nämlich 50 Tabs ca offen und hab das nicht mehr gefunden. Ich finde PowerShell My Powershell - PowerShellPraxis.de ist ne Top Seite. Danke :) Zitieren Link zu diesem Kommentar
Bernd W 10 Geschrieben 23. März 2012 Melden Teilen Geschrieben 23. März 2012 Wär das nicht das richtige für Dich? Select Folder Dialog - Powershell.com Zitieren Link zu diesem Kommentar
MichaTo 10 Geschrieben 24. März 2012 Melden Teilen Geschrieben 24. März 2012 Du musst dir erstmal überlegen, von wo ausgehend etwas kopiert werden soll. Ist das Ausgangsverzeichnis IMMER gleich, muss der User ja nur den Verzeichnisnamen angeben. So wie am Anfang mit $env:USERPROFILE Wenn z.B. "C:\Folder123\" das Ausgangsverzeichnis wäre, dann könnte dir evtl. folgender Code helfen: $TestPath = $false while(!($TestPath)) { $path = Read-Host "Zu kopierendes Verzeichnis?" $TestPath = Test-Path $path if(!($TestPath)) { write-warning "Angegebenes Verzeichnis existiert nicht" } } Zum Thema $env:USERPROFILE Gib mal in deiner PS den Befehl dir env: ein. Damit listest du dir alles Umgebungsvariablen von Windows auf. Dort wirst du auch die Umgebungsvariable USERPROFILE finden, welche du mit $env:USERPROFILE aufrufst, bei welcher es sich übrigens um das Profil des aktuell angemeldeten Benutzers (!!!) handelt. Zitieren Link zu diesem Kommentar
MichaTo 10 Geschrieben 24. März 2012 Melden Teilen Geschrieben 24. März 2012 Habe den Link von Bernd W eben erst gelesen, das hört sich ja auch nicht schlecht an. Man könnte das mit Sicherheit auch gut im Script verbauen... Gruß Micha Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 26. März 2012 Autor Melden Teilen Geschrieben 26. März 2012 Wär das nicht das richtige für Dich? Select Folder Dialog - Powershell.com Danke das war genau das was ich gesucht habe. BIn aber noch nicht fertig mit diesem Script möchte das ganze erweitern das er dem User ein Email schick mit dem Log File von der Sicherung. In diesem Log File sollten alle Dateien die Kopiert worden sind aufgelistet sein. Und ich möchte so einen Prozent Balken Einbauen damit man sieht wie weit der Kopiervorgang schon ist. Wie könnte man sowas lösen ? Danke für eure Hilfe und ich wünsch euch allen einen wünderschönen Guten Morgen und einen erfolgreichen Start in die Woche :) Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 26. März 2012 Melden Teilen Geschrieben 26. März 2012 ## shows a FixedToolWindow with a ProgressBar and a Label ## [Void] [reflection.assembly]::LoadWithPartialName("System.Windows.Forms"); # $pgBar progress-bar [system.Windows.Forms.ProgressBar] $pgBar = New-Object "System.Windows.Forms.ProgressBar"; $pgBar.Location = New-Object -TypeName "System.Drawing.Point" -ArgumentList 12,10; $pgBar.Size = New-Object -TypeName "System.Drawing.Size" -ArgumentList 260,30; $pgBar.Minimum = 0; $pgBar.Maximum = 1000; $pgBar.Step = 1; $pgBar.Value = 600; # $pgText text under progress-bar [system.Windows.Forms.Label] $pgText = New-Object "System.Windows.Forms.Label"; $pgText.Location = New-Object -TypeName "System.Drawing.Point" -ArgumentList 15,45; $pgText.AutoSize = $true; $pgText.Text = "..\dir1\dir2 (600 / 1000)"; # $pgForm form as fixed toolbar-window [system.Windows.Forms.Form] $pgForm = New-Object "System.Windows.Forms.Form"; $pgForm.Text = "Backup"; $pgForm.ClientSize = New-Object -TypeName "System.Drawing.Size" -ArgumentList 284,75; $pgForm.FormBorderStyle = 'FixedToolWindow'; $pgForm.ShowInTaskbar = $true; $pgForm.Controls.Add($pgText); $pgForm.Controls.Add($pgBar); [Void] $pgForm.ShowDialog(); Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 26. März 2012 Melden Teilen Geschrieben 26. März 2012 Windows PowerShell Tip: Making Progress Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 26. März 2012 Autor Melden Teilen Geschrieben 26. März 2012 ## shows a FixedToolWindow with a ProgressBar and a Label ## [Void] [reflection.assembly]::LoadWithPartialName("System.Windows.Forms"); # $pgBar progress-bar [system.Windows.Forms.ProgressBar] $pgBar = New-Object "System.Windows.Forms.ProgressBar"; $pgBar.Location = New-Object -TypeName "System.Drawing.Point" -ArgumentList 12,10; $pgBar.Size = New-Object -TypeName "System.Drawing.Size" -ArgumentList 260,30; $pgBar.Minimum = 0; $pgBar.Maximum = 1000; $pgBar.Step = 1; $pgBar.Value = 600; # $pgText text under progress-bar [system.Windows.Forms.Label] $pgText = New-Object "System.Windows.Forms.Label"; $pgText.Location = New-Object -TypeName "System.Drawing.Point" -ArgumentList 15,45; $pgText.AutoSize = $true; $pgText.Text = "..\dir1\dir2 (600 / 1000)"; # $pgForm form as fixed toolbar-window [system.Windows.Forms.Form] $pgForm = New-Object "System.Windows.Forms.Form"; $pgForm.Text = "Backup"; $pgForm.ClientSize = New-Object -TypeName "System.Drawing.Size" -ArgumentList 284,75; $pgForm.FormBorderStyle = 'FixedToolWindow'; $pgForm.ShowInTaskbar = $true; $pgForm.Controls.Add($pgText); $pgForm.Controls.Add($pgBar); [Void] $pgForm.ShowDialog(); DANKE DANKE wo sollte man sowas im script einbauen, also an wechler Stelle findet das Platz ? lg Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 26. März 2012 Autor Melden Teilen Geschrieben 26. März 2012 Hallo Leute! Ich hab mir das jetzt eine ProgeressBar eingebaut. if (Test-Path -Path $var2) { Write-Host "Die Eingabe war Korrekt." cd $var2 $var3 = mkdir $date -Force Copy-Item -Path $var1 -Destination $var3 -Recurse -Force | Write-Host "Kopiervorgang gestartet dies kann einige Zeit in Anspruch nehmen" For($i = 1; $i -le $files.count; $i++) { Write-Progress -Activity "Backup von den Daten" -status "Backup gestartet" ` -percentComplete ($i / $files.count*100)} $backup_log = Dir -Recurse $var2 | Sort-Object | out-File "$var2\backup_log.txt" Write-Host "Der Kopiervorgang abgeschlossen auf"$var2 Write-Host "Das Protokoll finden sie unter:"$var2 } Ich sehe auch das die ProgressBar aufgeht. Aber beim Probieren von meinen Script habe ich einen Bug endeckt. Fehlermeldung: "Copy-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters." Also die Ornder namen werden dem Script zu lange. Gibt es eine Möglich das zu denfieren oder besser gesagt die Lange zu verlängern ? Danke für eure Hilfe Lg Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 26. März 2012 Melden Teilen Geschrieben 26. März 2012 Copy-Item Hm das sieht schlecht aus, da du Ordnerpfade >260 auch nicht mehr ohne weiteres löschen kannst Die maximale Ordnertiefe wird hier durch Windows auf 260Zeichen begrenzt - Das musst du beachten. Die Ordnerstruktur der Ressource müsste als geändert werden und die Dateinamen sollten fest definierte Formatierungen enthalten, womöglich kannst du auch die Pfadlänge des Zielverzeichnisses ein wenig kürzen. So wie ich das sehe, ist der Ordnername/Dateiname der Zieldatei zu lang, die Stringlänge kannst du ja einfach überprüfen und bei Bedarf verkürzen. Soweit du die Ressource aber angepasst hast, sollte es hier keine Probleme mehr geben. Grüße Admin Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.