ralus67
Goto Top

Ftype in Powershell

Hallo community

Unter Powershell muss ich einen cmd Befehl "ftype" ausführen, aber dieser wird nicht übernommen.

Mein Powershell Skript sieht wie folgt aus.

function ftype { cmd /c ftype extmpp="C:\Program Files (x86)\ProjectViewer\ProjectViewer.exe" "%%1" }

Wo ist mein Fehler?

Im voraus vielen Dank für Eure Hilfe

Content-Key: 1128467635

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

Printed on: May 11, 2024 at 00:05 o'clock

Member: TK1987
TK1987 Aug 06, 2021 updated at 08:05:14 (UTC)
Goto Top
Moin,

Zitat von @Ralus67:
Mein Powershell Skript sieht wie folgt aus.

function ftype { cmd /c ftype extmpp="C:\Program Files (x86)\ProjectViewer\ProjectViewer.exe" "%%1" }  

Wo ist mein Fehler?
sind zwei Fehler.

Zum einen musst du den Befehl als eine komplette Zeichenkette übergeben, da Powershell sonst durch das Gleichzeichen versucht einen Wert zu setzen.

Zum anderen wird der CMD-Befehl anschließend so ausgeführt, als wenn du ihn in der Konsole eintippst - und nicht wie bei einem Batch-Script.
Die Prozentzeichen darfst du somit nicht verdoppeln, sonst führt das später zu Fehlern bei der Ausführung des Programms, weil der Dateipfad nicht richtig übergeben wird.
function ftype { cmd /c 'ftype extmpp="C:\Program Files (x86)\ProjectViewer\ProjectViewer.exe" "%1"' }  

Gruß Thomas
Member: Ralus67
Ralus67 Aug 06, 2021 at 08:14:56 (UTC)
Goto Top
Hat leider nicht funktioniert Ich finde die extmpp Erweiterung nicht, wenn ich nach ihr suche.

ftype | findstr "extmpp"
Member: TK1987
TK1987 Aug 06, 2021 updated at 08:28:17 (UTC)
Goto Top
Hat leider nicht funktioniert Ich finde die extmpp Erweiterung nicht, wenn ich nach ihr suche.
Hast du die ftype Funktion denn auch mal ausgeführt, nachdem du sie erstellt hast?
Hat mich gleich gewundert, warum du eine Funktion für einen Befehl erstellst, den man eigentlich nur einmal ausführt.

Lass das mit der Funktion weg und führe einfach nur folgendes mit Powershell aus:
cmd /c 'ftype extmpp="C:\Program Files (x86)\ProjectViewer\ProjectViewer.exe" "%1"'  

ftype | findstr "extmpp"  
Findstr ist hier unnötig, einfach nur
ftype extmpp
Member: Ralus67
Ralus67 Aug 06, 2021 at 08:42:02 (UTC)
Goto Top
wurde nicht gesetzt.....
extmpp
Member: TK1987
TK1987 Aug 06, 2021 at 08:49:40 (UTC)
Goto Top
Dann hast du irgendetwas falsch gemacht, bei mir funktioniert der Befehl perfekt.

Ich vermute mal du hast den Befehl nicht als Admin ausgeführt, eigentlich erhälst du in dem Fall aber auch eine "Zugriff verweigert"-Meldung.
Member: Ralus67
Ralus67 Aug 06, 2021 at 08:53:39 (UTC)
Goto Top
Die Befehle sehen so aus...


function ftype { cmd /c 'ftype extmpp="C:\Program Files (x86)\ProjectViewer\ProjectViewer.exe" "%1"' }
function assoc { cmd /c '.mpp=extmpp'}

ich habe Powershell als Administrator ausgeführt und diese beiden Befehle werden in einer ps1 Datei ausgeführt.

In der Powershell Konsole erhalte ich keine Fehlermeldung. Wenn ich keine Rechte hätte, müsste eine Fehlermeldung erscheinen.
Member: TK1987
Solution TK1987 Aug 06, 2021 updated at 09:00:32 (UTC)
Goto Top
Zitat von @Ralus67:
function ftype { cmd /c 'ftype extmpp="C:\Program Files (x86)\ProjectViewer\ProjectViewer.exe" "%1"' }  
function assoc { cmd /c '.mpp=extmpp'}  
ich habe Powershell als Administrator ausgeführt und diese beiden Befehle werden in einer ps1 Datei ausgeführt.
Wie ich oben schon gesagt habe, hast du in dem Fall noch keine Befehle ausgeführt(!), sondern lediglich Funktionen erstellt, die du dann aber nicht aufgerufen hast.

Lass das mit den Funktionen weg und führe einfach nur folgendes aus:
cmd /c 'ftype extmpp="C:\Program Files (x86)\ProjectViewer\ProjectViewer.exe" "%1"'  
cmd /c 'assoc .mpp=extmpp'  
Member: Ralus67
Ralus67 Aug 06, 2021 at 09:06:43 (UTC)
Goto Top
Danke, das war die Lösung.

Wieso braucht man denn hier die function nicht?
Member: TK1987
TK1987 Aug 06, 2021 at 09:50:22 (UTC)
Goto Top
Wieso braucht man denn hier die function nicht?
Funktionen sind nur dazu da, einen Code immer wieder ausführen zu können, ohne ihn jedes mal wieder komplett erneut tippen zu müssen.

Beispiel:
function Deutschland {
  write-host -BackGroundColor 'black'   (' '*10)  
  write-host -BackGroundColor 'red'     (' '*10)  
  write-host -BackGroundColor 'yellow'  (' '*10)  
}
Ich erstelle eine Funktion namens "Deutschland", in der ich 3 Befehle ausführe.
In diesem Fall gebe ich einfach 3*10 Leerzeichen jeweils mit verschiedenen Hintergrundfarben auf der Konsole aus, um so die Deutschlandfahne zu erzeugen.

Von nun an kann ich mir immer wieder die Fahne auf der Konsole ausgeben lassen, in dem ich nur den Namen der Funktion eintippe:
unbenannt

Du hast also bei dir jeweils 2 Funktionen erstellt, eine Namens "ftype" und eine Namens "assoc" - nur aufgerufen hast du diese anschließend nicht.
Allerdings macht eine Funktion in deinem Fall ohnehin wenig Sinn, da du die Befehle ja nur ein einziges mal ausführen musst.