h41msh1c0r
Goto Top

Powershell Pfad überprüfen

Hi @ PS Profis,

function Validate-Path
{
	[OutputType([Boolean])]
	param([string]$Path)
	
    if ($Path -eq $null -or $Path -eq "")  
    {
		return $false
	}
	
    $invalidChars = [System.IO.Path]::GetInvalidPathChars();

    foreach ($pathChar in $Path)
    {
        foreach ($invalid in $invalidChars)
        {
            if ($pathChar -eq $invalid)
            {
				return $false
			}
        }
    }

    return $true
}

$btn_Hash_Click = {
	$rtb_result.Clear()
	
	if ($tb_FolderSource.Text -gt "") {  
		$validate_returnSource = Validate-Path -Path $tb_FolderSource
		
		if ($validate_returnSource -eq $true)
		{
			$rtb_result.AppendText("Pfad gültig: "+$validate_returnSource)  
		}
		else
		{
			$rtb_result.AppendText("Pfad nicht gültig: " + $validate_returnSource)  
		}		
	}
	else
	{
		$rtb_result.AppendText("Kein Text enthalten `n")  
	}
}	

Irgendwie seh ich den Wald vor lauter Bäumen nicht. (oder es ist einfach Zeit für Feierabend)

Er geht mir IMMER in den Zweig:
$rtb_result.AppendText("Pfad gültig: "+$validate_returnSource)  

Die äußere if Abfrage erkennt er noch korrekt, also ob was im Textfeld drinnen steht oder nicht.
Die Innere mit der Validierung des Pfades geht immer auf $true.

;(

Gruß vom H41mSh1C0r

Content-ID: 290407

Url: https://administrator.de/contentid/290407

Ausgedruckt am: 24.11.2024 um 00:11 Uhr

122990
Lösung 122990 08.12.2015 aktualisiert um 19:32:27 Uhr
Goto Top
N'Abend.
Validate-Path -Path $tb_FolderSource
Fällt dir hier was auf face-smile, hier übergibst du das Objekt anstatt des Textes ....

Gruß grexit
colinardo
Lösung colinardo 08.12.2015 aktualisiert um 19:32:30 Uhr
Goto Top
Hallo Heim...,
zum Fehler siehe Kommentar von @122990...

Ich mach die Überprüfung von Pfad und Dateiangaben immer mit dieser Funktion:
function Validate-Path( [parameter(Mandatory=$true)][string]$path, [parameter(Mandatory=$true)][ValidateSet('DirectoryName','FileName')]$type){  
    switch($type){
       'Directoryname'{if ($path -match "[$(([System.IO.Path]::GetInvalidPathChars() | %{"\x"+([byte][char]$_).toString('X').PadLeft(2,"0")}) -join '')]"){return $false}else{return $true}}  
       'Filename'{if ($path -match "^com[1-9]|^lpt[1-9]|^con|^nul|^prn|[$(([System.IO.Path]::GetInvalidFileNameChars() | %{"\x"+([byte][char]$_).toString('X').PadLeft(2,"0")}) -join '')]"){return $false}else{return $true}}  
    }
}
Sie hat eine Option zur Überprüfung von purem Pfad
Validate-Path 'C:\ordner' -type DirectoryName
oder einzelnem Dateinamen:
Validate-Path 'dateiname.txt' -type FileName

Vielleicht kannst du es mal gebrauchen face-smile

Grüße Uwe
H41mSh1C0R
H41mSh1C0R 08.12.2015 um 19:29:44 Uhr
Goto Top
*katsching* =)

Das allein hat allerdings nicht gereicht. =)

-or (Test-path $Path) -eq $false)

Die erste if Abfrage in der Validate Function noch um das obrige erweitert und dann kommt auch dann true oder false wann ich das möchte. =)

Denke das bekomm ich aber noch zusammengestutzt.(morgen) *g*

Gruß und danke dir aus dem Feierabend ^^
H41mSh1C0R
H41mSh1C0R 08.12.2015 um 19:32:21 Uhr
Goto Top
Hallo Uwe,

auch dir danke. Ich stricke morgen am Script weiter. =)

Gruß
H41mSh1C0r
122990
122990 08.12.2015 aktualisiert um 19:35:32 Uhr
Goto Top
Das allein hat allerdings nicht gereicht. =)
Weiß hier ja keiner was das Skript alles überprüfen / bewirken soll ... Na egal Hauptsache es hat geschnackelt face-smile
H41mSh1C0R
H41mSh1C0R 08.12.2015 um 19:38:22 Uhr
Goto Top
Das Validate-Path was im Ausgangspost drin ist ist ohne die Anpassung immer auf true gelaufen. =)
Egal was drinnen stand.
122990
122990 08.12.2015 um 19:47:51 Uhr
Goto Top
Ach so, ich dachte du prüfst hier nur die Pfad-"Gültigkeit" und nicht die "Verfügbarkeit". Da haben wir uns missverstanden.
colinardo
colinardo 08.12.2015 aktualisiert um 19:50:28 Uhr
Goto Top
Zitat von @122990:
Ach so, ich dachte du prüfst hier nur die Pfad-"Gültigkeit" und nicht die "Verfügbarkeit". Da haben wir uns missverstanden.
So dachte ich übrigens auch face-wink

Meine Funktionen oben tun auch nur das, also nur die Gültigkeit der Eingaben prüfen und nicht die tatsächliche Verfügbarkeit, das macht ja Test-Path schon.
H41mSh1C0R
H41mSh1C0R 08.12.2015 um 19:51:09 Uhr
Goto Top
Der Gedanke war das da gleich mitzuerschlagen.
colinardo
colinardo 08.12.2015 aktualisiert um 19:53:32 Uhr
Goto Top
Zitat von @H41mSh1C0R:

Der Gedanke war das da gleich mitzuerschlagen.
Ja klar, wenn der Pfad auf dem System unter dem aktuellen Account verfügbar ist, geht das natürlich, gäbe ja auch Situationen in denen das nicht so ist face-wink
H41mSh1C0R
H41mSh1C0R 08.12.2015 um 19:53:33 Uhr
Goto Top
=) Das grübel ich morgen weiter.

Danke euch beiden und nun ab in den Feierabend. =) =)