Jump to content

Ordner Angabe durch User ?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
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 :)

Link zu diesem Kommentar
## 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();

Link zu diesem Kommentar
## 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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...