Zum Inhalt wechseln


Foto

Ordner Angabe durch User ?


  • Bitte melde dich an um zu Antworten
30 Antworten in diesem Thema

#16 schreckinger

schreckinger

    Junior Member

  • 73 Beiträge

 

Geschrieben 22. März 2012 - 13:28

$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

#17 schreckinger

schreckinger

    Junior Member

  • 73 Beiträge

 

Geschrieben 22. März 2012 - 14:07

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

#18 Dukel

Dukel

    Board Veteran

  • 9.253 Beiträge

 

Geschrieben 22. März 2012 - 14:13

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?

#19 lefg

lefg

    Expert Member

  • 20.480 Beiträge

 

Geschrieben 22. März 2012 - 14:18

PowerShell - Laufwerke, Ordner, Dateien und Freigaben - PowerShellPraxis.de

http://www.powershel...43.0.html#c3960

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#20 schreckinger

schreckinger

    Junior Member

  • 73 Beiträge

 

Geschrieben 22. März 2012 - 14:22

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

#21 schreckinger

schreckinger

    Junior Member

  • 73 Beiträge

 

Geschrieben 22. März 2012 - 14:32

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 :)

#22 Bernd W

Bernd W

    Newbie

  • 9 Beiträge

 

Geschrieben 23. März 2012 - 18:31

Wär das nicht das richtige für Dich?

Select Folder Dialog - Powershell.com

#23 MichaTo

MichaTo

    Newbie

  • 61 Beiträge

 

Geschrieben 24. März 2012 - 18:46

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.

#24 MichaTo

MichaTo

    Newbie

  • 61 Beiträge

 

Geschrieben 24. März 2012 - 18:49

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

#25 schreckinger

schreckinger

    Junior Member

  • 73 Beiträge

 

Geschrieben 26. März 2012 - 06:48

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 :)

#26 lefg

lefg

    Expert Member

  • 20.480 Beiträge

 

Geschrieben 26. März 2012 - 07:05

## 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();

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#27 Dukel

Dukel

    Board Veteran

  • 9.253 Beiträge

 

Geschrieben 26. März 2012 - 07:26

Windows PowerShell Tip: Making Progress

#28 schreckinger

schreckinger

    Junior Member

  • 73 Beiträge

 

Geschrieben 26. März 2012 - 08:26

## 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

#29 schreckinger

schreckinger

    Junior Member

  • 73 Beiträge

 

Geschrieben 26. März 2012 - 10:16

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

#30 PowerShellAdmin

PowerShellAdmin

    Board Veteran

  • 1.135 Beiträge

 

Geschrieben 26. März 2012 - 13:02

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