Do-While Schleife mit test-path

Mitglied: windelterrorist

windelterrorist (Level 1) - Jetzt verbinden

21.12.2015, aktualisiert 22.12.2015, 2579 Aufrufe, 12 Kommentare

Sry, dass ich euch nochmals stören muss...

Brauche Hilfe bei einer Do-While Schleife... Es soll erst nach $destination abgefragt werden, wenn der Quellpfad genau definiert wurde
(mit überprüfung, dass der Sourcepfad auch wirklich existiert, falls dieser nicht existiert, erneut abfragen... wenn der Sourcepfad auch wirklich exisitiert soll der Loop verlassen werden)


Mein Code:

...

$source = read-host "Bitte geben sie den Sourcepfad ein"
Do {
If (Test-path $source) {
$destination = read-host "Bitte geben sie den Zielpfad ein (Am Ende des Pfades keinen \ )"
}

else {
echo "Dieser Pfad existiert nicht, bitte prüfen Sie ihre Eingabe!"
}
}

While (bedingung)

...

Nun fehlt eigentlich nur noch die While (bedingung)...


Danke schonmal im Voraus.

Gruss
windelterrorist
Mitglied: 114757
114757 (Level 4)
LÖSUNG 21.12.2015, aktualisiert 22.12.2015

Bitte warten ..
Mitglied: windelterrorist
21.12.2015, aktualisiert um 19:11 Uhr
Hi jodel32

Habs mir fast noch gedacht man muss das ganze mit 2 Schleifen machen... kann es erst Morgen testen, aber sollte ja eigentlich prima funktionieren...

Danke dir!

Grüsse
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
21.12.2015, aktualisiert um 19:04 Uhr
Zitat von @windelterrorist:
Habs mir fast noch gedacht man muss das ganze mit 2 Achleifwn machen...
Müssen tut man das nicht, kann man auch kombinieren macht das ganze aber etwas unübersichtllicher
Bitte warten ..
Mitglied: windelterrorist
22.12.2015 um 10:29 Uhr
Hat funktioniert, genau so, wie ich mir das vorstellte... bin gerade dabei das ganze zu versuchen in eine Schlaufe zu packen.... einfach aus Eigeninteresse :) face-smile

Vielen Dank jodel32 !
Bitte warten ..
Mitglied: windelterrorist
22.12.2015 um 15:49 Uhr
@114757

Als ich nun weitere Parte meines Skriptes testete, ist mir aufgefallen, dass es noch einen kleinen Makel gibt bei der einen Schlaufe hat...

Und zwar bei der Do-While Schleife mit dem $destination... wenn man zum Beispiel als Zielpfad "E:\test\kopieren" angibt, dann wäre es doch toll wenn er diesen auch erstellen würde (wenns z.B. erst E:\test gibt), anstatt die Meldung "Pfad existiert nicht" auszugeben...

Beim Sourcepfad muss dieser natürlich existieren, da stimmts parfait, aber der Zielfpfad könnte ja erstellt werden, wenn dieser noch nicht vorhanden ist... Trotzdem sollten aber Eingaben wie "E\:" (fehlerhaft) oder wie "D:\" (wenns das Laufwerk D: nicht gibt), verhindert werden...


Gruss
windelterrorist
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
LÖSUNG 22.12.2015, aktualisiert 06.01.2016
Zitat von @windelterrorist:
Und zwar bei der Do-While Schleife mit dem $destination... wenn man zum Beispiel als Zielpfad "E:\test\kopieren" angibt, dann wäre es doch toll wenn er diesen auch erstellen würde (
Wo ist das Problem ????
Fehler kannst du problemlos auch mit Try...Catch Konstrukten abfangen
Les die einfach mal die Grundlagen zum Errorhandling mit Powershell durch
http://blogs.msdn.com/b/kebab/archive/2013/06/09/an-introduction-to-err ...
dann sollte es auch bei dir Klick machen.
Bitte warten ..
Mitglied: windelterrorist
05.01.2016, aktualisiert um 09:21 Uhr
Hi jodel32

Also... tut mir leid, dass ich dir erst jetzt antworten konnte...
Vielen Dank für deine Bemühung!

Die try, catch Methode hat grundsätzlich mein Problem gelöst... aber in beiden Abfragen (Source- und Destinationpfad) tritt bei einer leeren Eingabe ("") folgendes auf:

Test-Path : Cannot bind argument to parameter 'Path' because it is an empty string.

if (!(Test-Path $source)){

~~~~~~~~~~~~

+ CategoryInfo : InvalidData: (:) face-smile [Test-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand



Ich versuchte es so zu lösen, jedoch erfolglos:

Do {
$source = Read-Host "Bitte geben Sie den Quellpfad an"
if (($source = "") -or !(Test-Path $source)){
write-host "Pfad existiert nicht" -ForegroundColor Yellow
}

}until(Test-Path $source)


Frohes Neus!
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
05.01.2016, aktualisiert 06.01.2016
einfach vorher mit einer if auf einen leeren String prüfen, oder das ganze mit regex abfackeln, bleibt dir überlassen ...
Bitte warten ..
Mitglied: windelterrorist
06.01.2016, aktualisiert um 10:58 Uhr
finde es aber komisch, dass es so nicht funktioniert:

Do {
$source = Read-Host "Bitte geben Sie den Quellpfad an"

if (($source -eq $null) -or !(Test-Path $source)){
write-host "Pfad existiert nicht" -ForegroundColor Yellow
}

}until(Test-Path $source)



Was ist denn da falsch? Oder was mache ich falsch? Nach einer leeren Eingabe spuckt er immer den selben Fehler aus...

Test-Path : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es sich um eine leere Zeichenfolge handelt.
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
LÖSUNG 06.01.2016, aktualisiert um 13:46 Uhr
Was ist denn da falsch?
Die Variable ist immer noch ein Object und nicht $null sondern ein leerer String, kannst du dir auch ganz einfach anzeigen lassen mit $source.getType()
Powershell Debugging erste Unterichtsstunde ...

Und außerdem sollte die Prüfung auf leeren String nicht in der gleichen IF-Abfrage stattfinden da immer beide Ausdrücke ausgewertet werden.

Kannst du dir auch als mehrfach verwendbare Funktion kapseln

Bitte warten ..
Mitglied: windelterrorist
06.01.2016, aktualisiert um 13:53 Uhr
Nun ist mir schon einiges klarer...

Ich denke nun muss ich dich nicht mehr weiter belästigen... was Pfade überprüfen angeht... ;)

Vielen herzlichen Dank!
Bitte warten ..
Mitglied: windelterrorist
12.01.2016, aktualisiert um 09:15 Uhr
Oder doch nochmals...

Für eine Destinationpath abfrage habe ich so meine Vorstellungen, kann sie aber selbst nicht wirklich umsetzen. Grundsätzlich ist der Aufbau ja ähnlich, wie beim Sourcepfad.

- Leere Eingabe verhindern und erneut abfragen
- Wenn kein "Laufwerksbuchstaben" (z.B. (C:\ oder D:\ ...)) am Anfang der Eingabe steht, oder der Laufwerksbuchstabe nicht existiert (z.B. Y:\ dabei gibt es diesen nicht), dann ebenfalls verhindern und erneut abfragen
- Wenn ein gültger Laufwerksbuchstaben eingegeben wurde, dann soll die folgende Struktur erstellt werden, z.B. :
Eingabe: C:\abcd , so wird der Ordner "abcd" im "C:\" Laufwerk erstellt

Mit @114757 's Hilfe konnte ich diese Grundstruktur erstellen:


function Get-ValidPath($querydest){
While($true){
$input = Read-Host $querydest
if($input -ne ""){
if (Test-Path $input){
return $input
}

else{

try{
md "$input"
}

catch{
#return $input
write-host $_.Exception.Message -F Red}
}
}

else{
write-host "Sie haben keine Eingabe getätigt! Eingabe wiederholen." -ForegroundColor Yellow}
}
}

cls
$destpath = Get-ValidPath "Zielpfad eingeben"
$destpath


Das Problem wäre jetzt einfach noch, dass er die Laufwerksbuchstaben erkennen soll und überprüfen, ob diese existieren.
Bitte warten ..
Heiß diskutierte Inhalte
Exchange Server
Sicherheits-Update KB5001779 für Exchange 2013-2019
kgbornVor 1 TagInformationExchange Server9 Kommentare

Microsoft hat zum 13. April 2021 das Sicherheitsupdate KB5001779 für Exchange 2013-2019 veröffentlicht, um vier RCE-Schwachstellen zu schließen. Das Update sollte zeitnah installiert werden. ...

Datenschutz
Regierung testet Einsatz von Microsoft Azure-Cloud für die Bundescloud
VisuciusVor 1 TagInformationDatenschutz34 Kommentare

LÄUFT! Deutschland will Microsoft für die Bundescloud testen Ich hätts ja beinahe unter dem Topic "Humor" veröffentlicht. Aber der 1. April ist ja durch ...

Festplatten, SSD, Raid
Festplatte aus defekten Notebook ausgebaut - wird nicht erkannt - Wie gelange ich an meine Daten?
1nCoreVor 21 StundenFrageFestplatten, SSD, Raid12 Kommentare

Hallo liebe Community, nach 7 Jahren hat mein XMG Notebook seinen Geist aufgegeben In dem Notebook waren zwei Festplatten verbaut (eine für System und ...

Server
Server Anbieter mit 2 NICs gesucht
gelöst SilvergreenVor 1 TagFrageServer16 Kommentare

Hallo Community, ich bin auf der Suche nach einem Serveranbieter, der VPS/Cloud Server mit 2 Netzwerkkarten anbietet. Eine Internetsuche brache mich da leider nicht ...

Internet
Woher holt sich Android die Kontaktdaten von unbekannten Rufnummern?
gelöst anteNopeVor 1 TagFrageInternet8 Kommentare

Hallo zusammen, seit einiger Zeit merke ich, dass mir mein Android Gerät Namen und Informationen zu mir unbekannten Teilnehmern präsentiert. Soll heißen eine nicht ...

Windows Netzwerk
MS Lizenzierung - externe Scandienstleistung
monstermaniaVor 23 StundenFrageWindows Netzwerk9 Kommentare

Hallo Allerseits, ich habe da mal eine Frage an die MS Lizenzspeziallisten. Eine externe Firma soll Scandienstleistungen für uns erledigen. Dazu ist angedacht, dass ...

Exchange Server
Exchange Update CU19 auf CU20 Fehler - Eine weitere Version dieses Produkts ist bereits installiert
gelöst StefanKittelVor 22 StundenFrageExchange Server6 Kommentare

Hallo, ich habe hier einen Exchange 2016 mit CU19 (15.1.2176.2). Darauf wollte ich nun CU20 installiert. Download Es erscheint Eine weitere Version dieses Produkts ...

Exchange Server
April 2021 Microsoft Exchange Server Security Updates
FrankVor 1 TagInformationExchange Server2 Kommentare

Microsoft has released security updates for vulnerabilities found in: Exchange Server 2013 Exchange Server 2016 Exchange Server 2019 These updates are available for the ...