internet2107

Datei an einem anderen Ort suchen - Powershell

Hallo.

Ich habe folgendes "Problem". Ich habe mir eine kleine UI gebaut, die auf Knopfdruck, also über Favoriten-Buttons bestimmte VHD verbindet.
Diese Sache befindet sich komplett auf einem USB-Stick.
Das funktioniert auch soweit einwandfrei. Nur kommt es ja ntürlich vor, dass man mit dem USB-Stick an einem anderen oder fremden PC einen anderen Laufwerksbuchstaben bekommt.
Die Favoriten werden aus einer ini-Datei gelesen.

Nun möchte ich aber eine automatische Prozedur einbauen, dass wenn der USB-Stick halt nicht als Beispiel Laufwerksbuchstabe E:\ hat, sondern h:\, der Button nach dem neuen Ort der Datei sucht.

Hier mal ein Ausschnitt von meinem Code

$paths = GET-WMIOBJECT win32_logicaldisk | select deviceid

# Standardpfad zur VHD
$favorite1_path = 'e:\vhd\beispiel.vhd'   

# Ist der Pfad leer, passiert nichts.
if ($favorite1_path -eq "") { return }  

# Hier soll das Suchen beginnen. Befindet sich die VHD-Datei nicht am Ort wie in  $favorite1_path vorgegeben, soll er über $paths auf allen verbundenen Laufwerksbuchstaben nach der VHD-Datei suchen.
	if (!(Test-Path -path "$favorite1_path"))   
	{
		write-host = "Searching ... please wait"    
		$favorite1_search = Get-ChildItem -path $favorite1_path | select-object name
		write-host = $favorite1_search
		$favorite1_path = Get-ChildItem -path $paths -Filter "$favorite1_path" -Recurse | select-object FullName  
		write-host = "Neuer Pfad " $favorite1_path  
	}

# Findet er die Datei definitiv gar nicht, kommt die Ausgabe.
	if (!($favorite1_path))
	{
	write-host = "No file found"  
		return
	}

Der Fehler aktuell ist, dass ich immer sofort den Fehler bekomme, dass er den Pfad nicht findet.
Wo habe ich hierbei noch einen Fehler, einen Denkfehler drin?

Vielen Dank
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 279757

Url: https://administrator.de/forum/datei-an-einem-anderen-ort-suchen-powershell-279757.html

Ausgedruckt am: 12.05.2025 um 14:05 Uhr

122990
Lösung 122990 10.08.2015 aktualisiert um 16:05:37 Uhr
Goto Top
Moin,
wenn die VHD im selben Pfad wie das Script liegt, bekommst du hiermit den aktuellen Pfad deines Scriptes:
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Und wenn du dann nur den Laufwerksbuchstaben davon brauchst erledigt das
$LW = split-path -Qualifier $MyInvocation.MyCommand.Definition
und schon weist du wo und auf welchem laufwerk du dich bewegst ...

Gruß grexit
internet2107
internet2107 10.08.2015 um 16:09:25 Uhr
Goto Top
Ich habe es ein wenig anders gelöst, aber dennoch vielen Dank für die Antwort und ebenso Hilfe.

Ich löse es nun so.

Ausschnitt aus dem Code
$USB_stick = $settings.Get_Item("USB_Stick")  
	$USB_Stick_VolumeName = GET-WMIOBJECT win32_logicaldisk | where { $_.volumename -eq "$USB_stick" } | select VolumeName  
	$USB_Stick_Volume = GET-WMIOBJECT win32_logicaldisk | where { $_.volumename -eq "$USB_stick" } | select Name  

Im Klartext bedeutet es: Ich habe in der ini-Datei ebenso den Namen meines Sticks eingetragen. Sollte ich nun den Stick in einen fremdem PC stecken und/oder dort noch ein/weitere Stick/s im PC stecken, oder halt andere logische LW, sucht der Code explizit nach dem Namen in der ini-Datei und weiß somit auch den LW-Buchstaben.