internet2107
Goto Top

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

Content-Key: 279757

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

Printed on: April 19, 2024 at 19:04 o'clock

Mitglied: 122990
Solution 122990 Aug 10, 2015 updated at 14:05:37 (UTC)
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
Member: internet2107
internet2107 Aug 10, 2015 at 14:09:25 (UTC)
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.