Verknüpfungen erstellen
Wie erstelle ich mit einer Batch Datei Verknüpfungen?
eine Verknüpfung ht ja diese Endung *.lnk aber wie sage ich der Batch Datei wohin die Verknüpfung führen soll?
Danke Thomas
eine Verknüpfung ht ja diese Endung *.lnk aber wie sage ich der Batch Datei wohin die Verknüpfung führen soll?
Danke Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 72240
Url: https://administrator.de/forum/verknuepfungen-erstellen-72240.html
Ausgedruckt am: 22.12.2024 um 20:12 Uhr
73 Kommentare
Neuester Kommentar
hi thomas,
das "problem" hatte ich neulich auch, scau mal unter
http://www.wer-weiss-was.de/theme9/article3146278.html
wenn du noch fragen hast ..
das "problem" hatte ich neulich auch, scau mal unter
http://www.wer-weiss-was.de/theme9/article3146278.html
wenn du noch fragen hast ..
... und wenn's tatsächlich vorrangig über Batch laufen soll, musst Du gar nicht so in die Ferne schweifen : (batch)(vbs) ShortCut Ziel und Befehl
Grüße
bastla
Grüße
bastla
Hallo Tompazi!
Da sich die im verlinkten Thread dargestellte Variante noch etwas straffen ließ, hier eine aktualisierte (und etwas kommentierte Fassung):
Grüße
bastla
[Edit] Noch kleine Korrekturen vorgenommen (überzähliges " entfernt, fehlende :: hinzugefügt) [/Edit]
Da sich die im verlinkten Thread dargestellte Variante noch etwas straffen ließ, hier eine aktualisierte (und etwas kommentierte Fassung):
@echo off & setlocal
::Speicherort der Verknüpfung (unterhalb von Startmenue\Programme)
set "zielpfad=%userprofile%\Startm~1\Programme\XXXXX"
::Falls das Symbol auf den Desktop soll:
::set "zielpfad=%userprofile%\Desktop"
::Name der Verknüpfung (ohne ".lnk")
set "progtitel=XXXXXXX"
::Speicherort der Programmdatei (wird auch für "Ausführen in:" verwendet)
set "progdir=C:\Programme"
set "progexe=XXXXXXXXX.exe"
::Kommentar
set "beschreibung=Erklärung eigentlich unnötig ..."
::Bei Bedarf Speicherordner der Verknüpfung erstellen (siehe oben "zielpfad"):
if not exist "%zielpfad%" md "%zielpfad%"
::temporäres VBScript erzeugen ...
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs
echo objShortcut.TargetPath="%progdir%\%progexe%">>%temp%\MakeShortCut.vbs
echo objShortcut.Description="%beschreibung%">>%temp%\MakeShortCut.vbs
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
::... ausführen ...
cscript //nologo %temp%\MakeShortCut.vbs
::... und wieder löschen.
del %temp%\MakeShortCut.vbs
Grüße
bastla
[Edit] Noch kleine Korrekturen vorgenommen (überzähliges " entfernt, fehlende :: hinzugefügt) [/Edit]
was muss ich bei Progdir und progexe eintragen wenn das einen Verknüpfung zu einem Ordner sein soll?
danke
danke
Hallo zusammen,
ich hab mir nun nach obiger Erklärung eine Verknüpfung auf dem Desktop erstellt.
Dabei hätte ich aber gerne, dass ich ein Symbol automatisch zuweisen kann, also nicht per Rechtsklick auf die Verknüpfung -> Eigenschaften, usw.
Kann man das realisieren und wenn ja, wie?
Gruß Steffen
ich hab mir nun nach obiger Erklärung eine Verknüpfung auf dem Desktop erstellt.
Dabei hätte ich aber gerne, dass ich ein Symbol automatisch zuweisen kann, also nicht per Rechtsklick auf die Verknüpfung -> Eigenschaften, usw.
Kann man das realisieren und wenn ja, wie?
Gruß Steffen
Hallo gizmovetter und willkommen im Forum!
Füge vor der Zeile
noch ein:
Für den Pfad kannst/solltest Du natürlich auch eine Batch-Variable (etwa %iconpfad%) verwenden. Falls sich in der angegebenen Datei mehrere Icons befinden, kannst Du anstelle von 0 die Nummer des gewünschten Symbols (Zählung beginnt bei 0) angeben.
Grüße
bastla
Füge vor der Zeile
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
echo objShortcut.IconLocation = "Pfad zu Deiner .exe-, .dll- oder .ico-Datei,0">>%temp%\MakeShortCut.vbs
Grüße
bastla
Hi bastla,
vielen Dank für die sehr schnelle Antwort.
Bin erst jetzt dazu gekommen, das ganze auszuprobieren. Ergebnis: Funktioniert prima!
Gruß Steffen
vielen Dank für die sehr schnelle Antwort.
Bin erst jetzt dazu gekommen, das ganze auszuprobieren. Ergebnis: Funktioniert prima!
Gruß Steffen
Hallo miteinander!
1. wie kann im Batch das Expandieren der Umgebungsvariable (zu einem Pfad) verhindert werden? Zum besseren Verständnis:
Es soll in dem Skript bei der Ausgabe nicht der expandierte Pfad, sondern die Umgebungsvariable so wie sie ist 1:1 geschrieben werden - also "%UserProfile% anstatt "C:\Benutzer\Administrator".
(Wenn in dem Skript am Schluss eine Umgebungsvariable - z. B. objShortcut.TargetPath="%UserProfile%\wscript.exe" - steht, funktioniert es in diesem Zusammenhang problemlos).
2. Gibt es eine Möglichkeit beim Erstellen einer Verknüpfung zusätzlich die Option "Als Administrator ausführen" zu setzen?
Vielen Dank für Tipps/Anregungen
gruß evinben
1. wie kann im Batch das Expandieren der Umgebungsvariable (zu einem Pfad) verhindert werden? Zum besseren Verständnis:
Es soll in dem Skript bei der Ausgabe nicht der expandierte Pfad, sondern die Umgebungsvariable so wie sie ist 1:1 geschrieben werden - also "%UserProfile% anstatt "C:\Benutzer\Administrator".
(Wenn in dem Skript am Schluss eine Umgebungsvariable - z. B. objShortcut.TargetPath="%UserProfile%\wscript.exe" - steht, funktioniert es in diesem Zusammenhang problemlos).
2. Gibt es eine Möglichkeit beim Erstellen einer Verknüpfung zusätzlich die Option "Als Administrator ausführen" zu setzen?
Vielen Dank für Tipps/Anregungen
gruß evinben
Hallo bastla!
allerdings beim Aufruf einer Batch mit CALL wird die Variable weiterhin expandiert - also so:
kommt folgendes raus:
Gibt es dafür eine Abhilfe?
Danke schön!
gruß
evinben
allerdings beim Aufruf einer Batch mit CALL wird die Variable weiterhin expandiert - also so:
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%%Userprofile%%" "ArgZwei" "ArgDrei"
kommt folgendes raus:
echo "C:\Benutzer\Administrator" "ArgZwei" "ArgDrei"
Gibt es dafür eine Abhilfe?
Danke schön!
gruß
evinben
Hallo bastla,
danke für den Korrekturhinweis nochmal: den fehlenden Befehl "SET" habe ich hier soeben nachgereicht, er war allerdings in der Batch-Datei, während ich alle möglichen Variante ausprobiert habe.
Ich habe auch ohne Anführungszeichen bei SET ausprobiert - so:
leider kein positives Ergebnis.
Wüsstest du eventuell eine Antwort auf meine zweite Frage?
(2. Gibt es eine Möglichkeit beim Erstellen einer Verknüpfung zusätzlich die Option "Als Administrator ausführen" zu setzen?)
Ich kämpfe noch...
gruß
evinben
danke für den Korrekturhinweis nochmal: den fehlenden Befehl "SET" habe ich hier soeben nachgereicht, er war allerdings in der Batch-Datei, während ich alle möglichen Variante ausprobiert habe.
Ich habe auch ohne Anführungszeichen bei SET ausprobiert - so:
set TargetFile=%%%%windir%%%%\System32\wscript.exe
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%TargetFile%"
leider kein positives Ergebnis.
Wüsstest du eventuell eine Antwort auf meine zweite Frage?
(2. Gibt es eine Möglichkeit beim Erstellen einer Verknüpfung zusätzlich die Option "Als Administrator ausführen" zu setzen?)
Ich kämpfe noch...
gruß
evinben
Hallo evinben!
Bei meinem Test hatte ich kein Problem mit der Übergabe:
Zur Frage 2 habe ich leider (derzeit) keine Idee ...
Grüße
bastla
Bei meinem Test hatte ich kein Problem mit der Übergabe:
D:\>type Aufruf.cmd
setlocal
set TargetFile=%%%%windir%%%%\System32\wscript.exe
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%TargetFile%"
D:\>type "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat"
echo %1
D:\>aufruf
D:\>setlocal
D:\>set TargetFile=%%windir%%\System32\wscript.exe
D:\>call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%%windir%%\S
ystem32\wscript.exe"
D:\>echo "%windir%\System32\wscript.exe"
"%windir%\System32\wscript.exe"
Grüße
bastla
Hallo Bastla,
danke für den Hinweis! Folgend sind meine Erkenntnisse:
Du hast Recht, es funktioniert, !nur! solange die Batch-Datei direkt aufgerufen wird. Wenn diese über eine Verknüpfung erfolgt, dann expandiert die Variable auf dem Weg zur Batchdatei leider zu einem vollständigen Pfad.
Und die Antwort wäre dann: C:\Windows\System32\wscript.exe
Wenn es irgendwie zu schaffen wäre das Expandieren der Umgebungsvariable zu unterdrücken, dann ist das Problem gelöst, da das temporärausgegebene VB-Skript - mit dem Variablenpfad - die Verknüpfung wie gewollt erstellt:
Und das Ergebnis in der Eigenschaften der Verknüpfung wäre dann 1:1: %windir%\System32\wscript.exe
Meine Mühen die Dateien über Verknüpfungen zu verwalten sind hoffentlich nicht umsonst.
Ich habe in der Hilfe von cmd /? nachgelesen - die Option setlocal enabledelayedexpansion bezieht sich doch nur auf FOR-Schleifen, die mir einbisschen Hoffnung gemach hat.
Wenn euch etwas einfällt, her damit.
gruß
evinben
danke für den Hinweis! Folgend sind meine Erkenntnisse:
Du hast Recht, es funktioniert, !nur! solange die Batch-Datei direkt aufgerufen wird. Wenn diese über eine Verknüpfung erfolgt, dann expandiert die Variable auf dem Weg zur Batchdatei leider zu einem vollständigen Pfad.
:Bei Aufruf einer Batch-Datei über Verknüpfung wird die Variable expandiert
set TargetFile=%%%%windir%%%%\System32\wscript.exe
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat.lnk" "%TargetFile%"
Und die Antwort wäre dann: C:\Windows\System32\wscript.exe
Wenn es irgendwie zu schaffen wäre das Expandieren der Umgebungsvariable zu unterdrücken, dann ist das Problem gelöst, da das temporärausgegebene VB-Skript - mit dem Variablenpfad - die Verknüpfung wie gewollt erstellt:
objShortcut.TargetPath="%windir%\System32\wscript.exe"
Meine Mühen die Dateien über Verknüpfungen zu verwalten sind hoffentlich nicht umsonst.
Ich habe in der Hilfe von cmd /? nachgelesen - die Option setlocal enabledelayedexpansion bezieht sich doch nur auf FOR-Schleifen, die mir einbisschen Hoffnung gemach hat.
Wenn euch etwas einfällt, her damit.
gruß
evinben
Hallo evinben!
Nun müsste mir erst einmal ein Grund einfallen, aus einem Batch einen anderen Batch über dessen Verknüpfung aufzurufen - aber sollte es wirklich so weit kommen, würde ich im aufgerufenen Batch einfach die vorher gesetzte Variable (hier also %TargetFile%) verwenden (und die dann überzählig gewordenen Prozentzeichen für ganz schlechte Zeiten aufbewahren ) ...
Grüße
bastla
Nun müsste mir erst einmal ein Grund einfallen, aus einem Batch einen anderen Batch über dessen Verknüpfung aufzurufen - aber sollte es wirklich so weit kommen, würde ich im aufgerufenen Batch einfach die vorher gesetzte Variable (hier also %TargetFile%) verwenden (und die dann überzählig gewordenen Prozentzeichen für ganz schlechte Zeiten aufbewahren ) ...
Grüße
bastla
...
Viele andere Anwender arbeiten gerne mit Batch-Schablonen. Werden zu der jeweiligen Schablone Verknüpfungen an verschiedene Verzeichnisse verteilt, kann von da aus immer auf sie zugegriffen werden, obwohl die Verzeichnisstruktur im Laufe der Zeit mehrmals verändert wurde.
Mit den Verknüpfung ist es nicht so ganz rosa – oft gehen die Beziehung doch verloren – dennoch meiner Erfahrung nach sehe ich es als günstiger auf Verknüpfungen zuzugreifen, als direkt auf die jeweilige Datei, da die Verzeichnisstruktur sich sehr intensiv ändert. Nue Umgebungsvariablen zu erstellen, ist eine sichere Lösung. Ich muss noch in der Hinsicht an Erfahrung sammeln.
Da in der Praxis doch öfter passiert, dass die Beziehungen der Verknüpfungen doch verloren gehen, könnten hier benutzerdefinierte Umgebungsvariablen Abhilfe schaffen. Allerdings ist der Datenträger auf den anderen Rechnern nicht einsatzfähig.
Im Grunde genommen, habe ich bisher global gesehen mit der verfolgten Strategie eher positive Ergebnisse gesammelt - es wird besser, robuster.
Was würdet ihr dazu sagen, wie ist eure Erfahrung in der Hinsicht? Gerne bin ich für Tipps und Hinweise offen.
Gruß
evinben
Nun müsste mir erst einmal ein Grund einfallen, aus einem Batch einen anderen Batch über dessen Verknüpfung aufzurufen
Es ist flexibler. Die Verknüpfungen können/dürfen verschoben werden. Die Verzeichnisstruktur wird/darf stets optimiert werden - mit der Zeit entstehen viele Änderungen. Die Anpassung der Zielpfade, die durch Änderungen der Verzeichnisstruktur durch den Benutzer ebenso aktualisiert werden müssen, übernimmt dann Windows im Hintergrund automatisch (Z. B. der Windows-Dienst TrkWks zum Überwachen verteilter Verknüpfungen auf Netzwerkebene aktualisiert die Zielpfade).Viele andere Anwender arbeiten gerne mit Batch-Schablonen. Werden zu der jeweiligen Schablone Verknüpfungen an verschiedene Verzeichnisse verteilt, kann von da aus immer auf sie zugegriffen werden, obwohl die Verzeichnisstruktur im Laufe der Zeit mehrmals verändert wurde.
Mit den Verknüpfung ist es nicht so ganz rosa – oft gehen die Beziehung doch verloren – dennoch meiner Erfahrung nach sehe ich es als günstiger auf Verknüpfungen zuzugreifen, als direkt auf die jeweilige Datei, da die Verzeichnisstruktur sich sehr intensiv ändert. Nue Umgebungsvariablen zu erstellen, ist eine sichere Lösung. Ich muss noch in der Hinsicht an Erfahrung sammeln.
würde ich im aufgerufenen Batch einfach die vorher gesetzte Variable (hier also %TargetFile%) verwenden
Wenn ich in dem aufgerufenen Batch die Variable setze, dann ist sie keine Schablone mehr. Mehrere separate Dateien müssen erstellt werden. Jede neue Idee, jede Änderung müssen dann auf allen Dateien vorgenommen werden. Die Entwicklung ist träge. Und der Hauptvorteil, den ich in den Verknüpfungen sehe, ist deren weitestgehend automatische Aktualisierung.Da in der Praxis doch öfter passiert, dass die Beziehungen der Verknüpfungen doch verloren gehen, könnten hier benutzerdefinierte Umgebungsvariablen Abhilfe schaffen. Allerdings ist der Datenträger auf den anderen Rechnern nicht einsatzfähig.
Im Grunde genommen, habe ich bisher global gesehen mit der verfolgten Strategie eher positive Ergebnisse gesammelt - es wird besser, robuster.
Was würdet ihr dazu sagen, wie ist eure Erfahrung in der Hinsicht? Gerne bin ich für Tipps und Hinweise offen.
Gruß
evinben
Hallo evinben!
Grüße
bastla
Wenn ich in dem aufgerufenen Batch die Variable setze, dann ist sie keine Schablone mehr.
Verstehe ich nicht - ich kann doch einfach beide Varianten (bestehende Variable, Parameterübergabe) verwenden:if not defined TargetPath (
if #%~1#==## echo Kein TargetPath angegeben & goto :eof
set "TargetPath=%~1"
)
bastla
Hallo Bastla!
;), du meist also so, wie es momentan in der Schablone steht:
Was ändert das alles eigentlich an der Tatsache, dass die Umgebungsvariable, die mit dem ersten Argument (anhand CALL „Verknüpfung zum Batch.lnk“) übergeben wird, expandiert wird?
Ich verstehe nicht so ganz was damit erreicht werden kann, außer einem versehentlichen Aufruf des Batches ohne Argumente zu verhindern?
Gruß
evinben
;), du meist also so, wie es momentan in der Schablone steht:
:Fehlermeldung ausgeben, falls es versucht wird diese Batch-Datei ohne Argumente auszuführen
set ArgumentAbfrage=%1
if not defined ArgumentAbfrage echo Diese Batch-Datei kann nur mit Argumenten ausgeführt werden: z. B: & echo. & echo start "%~dpnx0" "Name der Verknüpfung" "Verzeichnis der Verknüpfung" "Zielpfad" & pause >nul
Was ändert das alles eigentlich an der Tatsache, dass die Umgebungsvariable, die mit dem ersten Argument (anhand CALL „Verknüpfung zum Batch.lnk“) übergeben wird, expandiert wird?
Ich verstehe nicht so ganz was damit erreicht werden kann, außer einem versehentlichen Aufruf des Batches ohne Argumente zu verhindern?
Gruß
evinben
Hallo evinben!
Grüße
bastla
Ich verstehe nicht so ganz was damit erreicht werden kann, außer einem versehentlichen Aufruf des Batches ohne Argumente zu verhindern?
Wenn Du den Aufruf von einem Batch aus vornimmst, kannst Du bereits im aufrufenden Batch die Variable setzen - der aufgerufene Batch "erbt" diese dann, sodass eine Parameterübergabe gar nicht nötig ist. Wenn es dennoch die Option dazu geben soll, kannst Du ja durch geeignete Abfragen ("Wenn Parameter, dann diesen verwenden" oder, wie in meinem Beispiel oben, "Wenn Variable bereits gesetzt, dann diese verwenden, ansonsten Parameter") steuern, was gelten soll ...Grüße
bastla
Ohh mannn ihr alte Hasen !!!
endlich begriffen! Ich dachte mir die ganze Zeit, dass ein Argument via %~x zwingend erforderlich wäre. Bei mir hat das rote Lämpchen parallel zu deinem Schreiben aufgeleuchtet, dank deinem indirekten Tipp. Nun wollte ich gleich es schreiben, dass ich es verstanden habe, aber hast mich etwas überhohlt gehabt.
So lange hast du mich also quellen lassen …
Bastla - alles läuft bestens und die Verknüpfung wird mit der Variable 1:1 erstellt.
PS: es wären dann allerdings nur 2x % erforderlich (also set TargetFile=%%windir%%\System32\wscript.exe)
Nun bleibt noch das Ziel der Verknüpfung via VBS-Umweg inkl. den Umlauten auszulesen und das spannende Projekt "Verknüpfungen" ist zumindest soweit abgeschlossen.
Ich habe jedenfalls vieles dabei gelernt.
Gruß
evinben
endlich begriffen! Ich dachte mir die ganze Zeit, dass ein Argument via %~x zwingend erforderlich wäre. Bei mir hat das rote Lämpchen parallel zu deinem Schreiben aufgeleuchtet, dank deinem indirekten Tipp. Nun wollte ich gleich es schreiben, dass ich es verstanden habe, aber hast mich etwas überhohlt gehabt.
So lange hast du mich also quellen lassen …
Bastla - alles läuft bestens und die Verknüpfung wird mit der Variable 1:1 erstellt.
PS: es wären dann allerdings nur 2x % erforderlich (also set TargetFile=%%windir%%\System32\wscript.exe)
Nun bleibt noch das Ziel der Verknüpfung via VBS-Umweg inkl. den Umlauten auszulesen und das spannende Projekt "Verknüpfungen" ist zumindest soweit abgeschlossen.
Ich habe jedenfalls vieles dabei gelernt.
Gruß
evinben
Hallo bastla,
ich brauche deine Hilfe:
In der Verknüpfung soll exakt folgender Pfad eingebaut werden, damit sie fehlerfrei funktioniert:
%windir%\System32\runas.exe /user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""
Wenn ich allerdings in dem Code zur Erstellung einer Verknüpfung unter Parameter (Arguments) in dem Pfad die beiden Rückwärtsschrägstriche einfüge, dann meldet mir das VB-Skript jeweils beim Ausführen einen Fehler. So sieht das Skript momentan aus:
Ich habe viele Varianten/Kombinationen ausprobiert aber leider alles ohne Erfolg. Sollen die Schrägstriche escaped werden und wie genau sollte es in VB geschehen?
Gibt es eventuell eine Möglichkeit eine fertige Verknüpfung auszulesen und die korrekte Schreibweise der Parameterzeile, die in VB-Skript eingegeben werden soll, zu erfahren?
Vielen Dank
Gruß
evinben
ich brauche deine Hilfe:
In der Verknüpfung soll exakt folgender Pfad eingebaut werden, damit sie fehlerfrei funktioniert:
%windir%\System32\runas.exe /user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""
Wenn ich allerdings in dem Code zur Erstellung einer Verknüpfung unter Parameter (Arguments) in dem Pfad die beiden Rückwärtsschrägstriche einfüge, dann meldet mir das VB-Skript jeweils beim Ausführen einen Fehler. So sieht das Skript momentan aus:
Set objShell=WScript.CreateObject("Wscript.Shell")
Set objShortcut=objShell.CreateShortcut("%AppData%\Install\RegJump als Administrator.lnk")
objShortcut.TargetPath="%windir%\System32\runas.exe"
objShortcut.Arguments=/user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""
objShortcut.IconLocation="C:\Windows\regedit.exe,0"
objShortcut.Save
Gibt es eventuell eine Möglichkeit eine fertige Verknüpfung auszulesen und die korrekte Schreibweise der Parameterzeile, die in VB-Skript eingegeben werden soll, zu erfahren?
Vielen Dank
Gruß
evinben
Hallo evinben!
Anführungszeichen werden in VB durch Verdoppelung "escaped", sodass das syntaktisch etwa so aussehen sollte:
wobei noch anzumerken wäre, dass der Ordner "%AppData%\Install" bereits existieren (oder eben vom Script erstellt werden) muss ...
Bist Du übrigens sicher, dass Du "
Grüße
bastla
P.S.: Wenn
keine Anführungszeichen braucht, sollten sie auch für
nicht erforderlich sein ...
Anführungszeichen werden in VB durch Verdoppelung "escaped", sodass das syntaktisch etwa so aussehen sollte:
Set objShell=WScript.CreateObject("WScript.Shell")
Set objShortcut=objShell.CreateShortcut(objShell.ExpandEnvironmentStrings("%AppData%")&"\Install\RegJump als Administrator.lnk")
objShortcut.TargetPath="%windir%\System32\runas.exe"
objShortcut.Arguments="/user:Administrator /savecred %windir%\System32\wscript.exe ""%AppData%\Install\RegJump als Administrator.vbs"""
objShortcut.IconLocation="%windir%\regedit.exe,0"
objShortcut.Save
Bist Du übrigens sicher, dass Du "
/savecred
" verwenden willst?Grüße
bastla
P.S.: Wenn
%windir%\System32\runas.exe
%windir%\System32\wscript.exe
Hallo,
Vielleicht kennt er das Tool nicht? Die verschlüsselte Verknüpfung, die damit erstellt werden kann, enthält das Passwort, ohne dass das eingegeben werden muss oder ausgelesen werden kann.
http://www.pcwelt.de/downloads/pcwRunAs-1215998.html
Gruß
Bist Du übrigens sicher, dass Du "
/savecred
" verwenden willst?Vielleicht kennt er das Tool nicht? Die verschlüsselte Verknüpfung, die damit erstellt werden kann, enthält das Passwort, ohne dass das eingegeben werden muss oder ausgelesen werden kann.
http://www.pcwelt.de/downloads/pcwRunAs-1215998.html
Gruß
Hallo bastla,
und ollidolli
genauso wie du es vorgeschlagen hast bastla, habe ich gestern einige Male probiert. Wie ich es oben geschrieben habe , muss der Pfad in der Eigenschaften der Verknüpfung unter Ziel letztendlich so 1:1 aussehen:
%windir%\System32\runas.exe /user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""
D. h. ohne die beiden Rückwärts-Schrägstriche (Backslash) wird es nichts – sie stellen hier das Hauptproblem, so dass das Skript nicht richtig ausgeführt werden kann.
Eine Verknüpfung mit dem Schalter „/savecred“ wird nur den erlaubten Benutzern erstellt. Ich muss natürlich sehr aufpassen, dass die restlichen Benutzer keine Verknüpfungen versehentlich mit dem Schalter /savecred erhalten bzw. vielleicht gar keine. Am besten erstellt ich dann eine txt-Datei, in welcher die Benutzer mit erhöhten Rechten einzutragen wären, mit einer for /f Schleife die txt-Datei zeilenweise ablesen und nur für die vorhandenen Benutzern den Schalter /savecred automatisch einbauen lassen.
Über eine Äußerung und eventuelle Hinweise eurer Bedenken, hinsichtlich dem Schalter /savecred, würde ich mich sehr freuen.
Ah so @106009, ich bin da mittlerweile ein Windows-Bordmittel-Fanatiker geworden und fahre mit dieser Strategie ziemlich gut und immer noch begeistert zufrieden – vor allem bin ich sehr flexibel. Solche CHIP-Tools in meinen früheren Jahren haben die Registry oft so fahrlässig verstellt, dass ich im Schock bis heute bin (Systemwiederherstellung hat nicht geholfen, da einige Probleme zu spät lokalisiert worden sind). Ich habe ein Trauma davon – ich bin traumatisiert . Nun habe ich gelernt, dass ein bewusster Umgang beim Werkeln im System und einer Auseinandersetzung in der Funktion einzelner Schritten und Zusammenhängen nicht schadet . Klar investiert man da viel an Zeit, aber ehrlich ich möchte das Wissen !in meiner Tätigkeit! nicht mehr missen.
Danke schön für den Tipp. Vielleicht siehst du in meiner Erfahrung und Meinung Kontra-Punkte, dann natürlich diese gerne äußern – ich bleibe weiterhin offen - wobei klare Argumenten wären hier entscheidend.
Gruß
evinben
und ollidolli
genauso wie du es vorgeschlagen hast bastla, habe ich gestern einige Male probiert. Wie ich es oben geschrieben habe , muss der Pfad in der Eigenschaften der Verknüpfung unter Ziel letztendlich so 1:1 aussehen:
%windir%\System32\runas.exe /user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""
D. h. ohne die beiden Rückwärts-Schrägstriche (Backslash) wird es nichts – sie stellen hier das Hauptproblem, so dass das Skript nicht richtig ausgeführt werden kann.
wobei noch anzumerken wäre, dass der Ordner "%AppData%\Install" bereits existieren (oder eben vom Script erstellt werden) muss ...
Ja, dafür wurde gesorgt: der Ordner wird bei Bedarf von dem übergeordneten Batch, der das Skript ausführt, erstellt (im Vergleich zu VB kenne ich mich in Batch noch deutlich besser aus)Bist Du übrigens sicher, dass Du "/savecred" verwenden willst?
Puuhhh, ich hoffe sehr die Gefahren erhöhen sich somit nicht, da das Benutzer-Passwort vom Anfang an in der Registry ja sowieso verschlüsselt gelagert wird und das Tool RunAs mit dem Schalter /savecred für jeweilige Datei nur einen Stempel erstellt, mit dem er sich merkt, welche Dateien ohne erneuten Passwortabfrage direkt ausgeführt werden dürfen. Das wäre zumindest meine Logik. RunAs speichert in dem Sinne keine Passwörter!? Es wäre ja sicherheitstechnisch etwas schwächer, da mehr Potential zum Knacken anbieten würde.Eine Verknüpfung mit dem Schalter „/savecred“ wird nur den erlaubten Benutzern erstellt. Ich muss natürlich sehr aufpassen, dass die restlichen Benutzer keine Verknüpfungen versehentlich mit dem Schalter /savecred erhalten bzw. vielleicht gar keine. Am besten erstellt ich dann eine txt-Datei, in welcher die Benutzer mit erhöhten Rechten einzutragen wären, mit einer for /f Schleife die txt-Datei zeilenweise ablesen und nur für die vorhandenen Benutzern den Schalter /savecred automatisch einbauen lassen.
Über eine Äußerung und eventuelle Hinweise eurer Bedenken, hinsichtlich dem Schalter /savecred, würde ich mich sehr freuen.
Ah so @106009, ich bin da mittlerweile ein Windows-Bordmittel-Fanatiker geworden und fahre mit dieser Strategie ziemlich gut und immer noch begeistert zufrieden – vor allem bin ich sehr flexibel. Solche CHIP-Tools in meinen früheren Jahren haben die Registry oft so fahrlässig verstellt, dass ich im Schock bis heute bin (Systemwiederherstellung hat nicht geholfen, da einige Probleme zu spät lokalisiert worden sind). Ich habe ein Trauma davon – ich bin traumatisiert . Nun habe ich gelernt, dass ein bewusster Umgang beim Werkeln im System und einer Auseinandersetzung in der Funktion einzelner Schritten und Zusammenhängen nicht schadet . Klar investiert man da viel an Zeit, aber ehrlich ich möchte das Wissen !in meiner Tätigkeit! nicht mehr missen.
Danke schön für den Tipp. Vielleicht siehst du in meiner Erfahrung und Meinung Kontra-Punkte, dann natürlich diese gerne äußern – ich bleibe weiterhin offen - wobei klare Argumenten wären hier entscheidend.
Gruß
evinben
Die mag ich auch nicht. Aber das ist kein Chip-Tool, sondern eines der PC-Welt, von dem auch irgendwann mal die Sourcen veröffentlicht wurden.
Der Parameter /savecred bei runas merkt sich nach einmaliger Eingabe das Passwort für den Administrator und ermöglich so jede weitere Verwendung von runas ohne erneute Nachfrage/Eingabe für jeden damit verwendeten Parameter! Wenn das in deinem Sinne sein sollte, kannst du das so einsetzen.
Bei einer mit pcwRunas erstellten Verknüpfung funktioniert das nur und ausschließlich für das als Parameter eingetragene Programm und auch nur mit der Programmversion, die auch beim Erstellen der Verknüpfung aktuell war.
Gruß
Nun habe ich gelernt, dass ein bewusster Umgang beim Werkeln im System und einer Auseinandersetzung in der Funktion einzelner
Schritten und Zusammenhängen schadet nicht.
Sicher nicht, wenn man weiß, wie man damit richtig umgehen muss.Schritten und Zusammenhängen schadet nicht.
Der Parameter /savecred bei runas merkt sich nach einmaliger Eingabe das Passwort für den Administrator und ermöglich so jede weitere Verwendung von runas ohne erneute Nachfrage/Eingabe für jeden damit verwendeten Parameter! Wenn das in deinem Sinne sein sollte, kannst du das so einsetzen.
Bei einer mit pcwRunas erstellten Verknüpfung funktioniert das nur und ausschließlich für das als Parameter eingetragene Programm und auch nur mit der Programmversion, die auch beim Erstellen der Verknüpfung aktuell war.
Gruß
Hallo evinben!
Naja, wenn Du die Backslashes haben willst (ich habe die Verknüpfung nicht getestet, würde aber dennoch annehmen, dass sie überflüssig sind):
Grüße
bastla
Naja, wenn Du die Backslashes haben willst (ich habe die Verknüpfung nicht getestet, würde aber dennoch annehmen, dass sie überflüssig sind):
objShortcut.Arguments="/user:Administrator /savecred ""%windir%\System32\wscript.exe \""%AppData%\Install\RegJump als Administrator.vbs\"""""
bastla
Hallo,
ich habe das Script mal übernommen und angepasst, funktioniert auch tadellos, wäre da nicht noch eine Sache.
objShortcut.TargetPath fügt nun den Zielpfad zum Programm der Verknüpfung hinzu. Jetzt möchte ich aber zusätzlich noch Parameter übergeben, die die Programmausführung steuern. Nun werden diese Parameter leider mit in Anführungszeichen gesetzt, wodurch der Programmpfad ungültig wird.
Wie kriege ich es hin, dass die gesamte Anweisung (objShortcut.TargetPath) die Variable %progdir% ohne Anführungszeichen in die Verknüpfung schreibt? Oder wie kriege ich es hin, dass nur für die Variable %progdir% Anführungszeichen gesetzt werden, für alles Weitere, für die Parameter habe ich eigene Variablen definiert, keine Anführungszeichen.
ich habe das Script mal übernommen und angepasst, funktioniert auch tadellos, wäre da nicht noch eine Sache.
objShortcut.TargetPath fügt nun den Zielpfad zum Programm der Verknüpfung hinzu. Jetzt möchte ich aber zusätzlich noch Parameter übergeben, die die Programmausführung steuern. Nun werden diese Parameter leider mit in Anführungszeichen gesetzt, wodurch der Programmpfad ungültig wird.
Wie kriege ich es hin, dass die gesamte Anweisung (objShortcut.TargetPath) die Variable %progdir% ohne Anführungszeichen in die Verknüpfung schreibt? Oder wie kriege ich es hin, dass nur für die Variable %progdir% Anführungszeichen gesetzt werden, für alles Weitere, für die Parameter habe ich eigene Variablen definiert, keine Anführungszeichen.
Hallo!
hier bin ich wieder bei euch .
Hallo ollidolli,
danke dir!
Die Passwörter können bei Bedarf im „Tresor“ gelöscht werden, falls jemand es rückgängig machen möchte. Allerdings gebe ich dir völlig Recht, dass ein Admin unter einem anderen Benutzerkonto eine Datei über die bestehenden Verknüpfung mit runas /savecred ebenso mal irgendwann ausführen möchte und in der Vergessenheit mal schnell sein Passwort, das dann leider permanent gespeichert wird, angibt. Der Misst ist dadurch schnell geschehen…
Hallo bastla,
ich werde es gleich versuchen und dann berichten.
hier bin ich wieder bei euch .
Hallo ollidolli,
danke dir!
Die mag ich auch nicht. Aber das ist kein Chip-Tool, sondern eines der PC-Welt…
Ops… dann muss ich mich wohl wegen meines Vorurteils entschuldigen und werde nach deiner Empfehlung bei Gelegenheit eventuell das Tool ausprobieren.Sicher nicht, wenn man weiß, wie man damit richtig umgehen muss.
Entschuldigung, den Sinn deines Satzes verstehe ich nicht. Wie meinst du es genau?… und ermöglich so jede weitere Verwendung von runas ohne erneute Nachfrage/Eingabe für jeden damit verwendeten Parameter!
Vielen Dank für den Hinweis. Ich habe runas-Verknüpfung auf demselben Rechner aber mit einem anderen Benutzerkonto ausprobiert. Das Passwort wird doch für jeden Benutzer abgefragt. Also das Abspeichern des Passworts erfolgt nicht global für das ganze System – nicht „für jeden“.Die Passwörter können bei Bedarf im „Tresor“ gelöscht werden, falls jemand es rückgängig machen möchte. Allerdings gebe ich dir völlig Recht, dass ein Admin unter einem anderen Benutzerkonto eine Datei über die bestehenden Verknüpfung mit runas /savecred ebenso mal irgendwann ausführen möchte und in der Vergessenheit mal schnell sein Passwort, das dann leider permanent gespeichert wird, angibt. Der Misst ist dadurch schnell geschehen…
Hallo bastla,
ich werde es gleich versuchen und dann berichten.
Hallo,
Das steht in den 2 Sätzen dahinter.
Gruß
Zitat von @evinben:
Entschuldigung, den Sinn deines Satzes verstehe ich nicht. Wie meinst du es genau?
Entschuldigung, den Sinn deines Satzes verstehe ich nicht. Wie meinst du es genau?
Das steht in den 2 Sätzen dahinter.
Gruß
Hallo bastla!
Vielen Dank! Die Verknüpfung wird erstellt und sie funktioniert mit der von dir zuletzt mitgeteilten Syntax endlich! Mit deiner vorherigen Syntax (ohne die Rückwährts-Schrägstriche) geht es definitiv nicht.
Ein großes Problem habe ich noch. Wenn ich einen HKCU-Registry-Zweig mit runas.exe lade, dann lande ich zwar in dem HKCU-Zweig aber zwangsweise des Benutzers Administrator, obwohl ich den Schalter /env (behält die aktuelle Umgebung, anstatt diejenige des angegebenen Benutzers) verwende. Sehr enttäuschend.
Es geht ja darum nicht etwas zwingend mit dem Benutzer Administrator zu starten, sondern hauptsächlich mit erhöhten „administrativen“ Rechten zu starten, und zwar so als ob die Kontensteuerungsabfrage bestätigt wäre (also genau so wie mit "Als Administrator ausführen" über das kontextmenü der rechten Maustaste). Nur dann können bestimmte REG-Schlüssel geändert werden, ohne der Bastelei die Berechtigungen für jeden Schlüssel jeweils verändern zu müssen.
Wir sind zwar aus dem Weg des Themas „Verknüpfung erstellten“ einiges weggerutscht, ich finde es passt noch etwas dazu, ansonsten eröffne ich einen neuen Beitrag, falls es sein muss.
Gruß ollidolli!
danke dir - ja, jetzt habe ich es verstanden
Gruß
evinben
Naja, wenn Du die Backslashes haben willst (ich habe die Verknüpfung nicht getestet, würde aber dennoch annehmen, dass sie überflüssig sind):
Vielen Dank! Die Verknüpfung wird erstellt und sie funktioniert mit der von dir zuletzt mitgeteilten Syntax endlich! Mit deiner vorherigen Syntax (ohne die Rückwährts-Schrägstriche) geht es definitiv nicht.
Ein großes Problem habe ich noch. Wenn ich einen HKCU-Registry-Zweig mit runas.exe lade, dann lande ich zwar in dem HKCU-Zweig aber zwangsweise des Benutzers Administrator, obwohl ich den Schalter /env (behält die aktuelle Umgebung, anstatt diejenige des angegebenen Benutzers) verwende. Sehr enttäuschend.
Es geht ja darum nicht etwas zwingend mit dem Benutzer Administrator zu starten, sondern hauptsächlich mit erhöhten „administrativen“ Rechten zu starten, und zwar so als ob die Kontensteuerungsabfrage bestätigt wäre (also genau so wie mit "Als Administrator ausführen" über das kontextmenü der rechten Maustaste). Nur dann können bestimmte REG-Schlüssel geändert werden, ohne der Bastelei die Berechtigungen für jeden Schlüssel jeweils verändern zu müssen.
Wir sind zwar aus dem Weg des Themas „Verknüpfung erstellten“ einiges weggerutscht, ich finde es passt noch etwas dazu, ansonsten eröffne ich einen neuen Beitrag, falls es sein muss.
Gruß ollidolli!
danke dir - ja, jetzt habe ich es verstanden
Gruß
evinben
Hi,
Nee, korrekt. Umgebung ist das Environment mit den Umgebungsvariablen.
Im HKU-Zweig findest du auch unter dem entsprechenden SID den Zweig des auch angemeldeten Benutzers, aus dessen Kontext du runas aufgerufen hast.
Und da kannst du deine Änderungen vornehmen.
Gruß
Zitat von @evinben:
Ein großes Problem habe ich noch. Wenn ich einen HKCU-Registry-Zweig mit runas.exe lade, dann lande ich zwar in dem
HKCU-Zweig aber zwangsweise des Benutzers Administrator, obwohl ich den Schalter /env (behält die aktuelle
Umgebung, anstatt diejenige des angegebenen Benutzers) verwende. Sehr enttäuschend.
Ein großes Problem habe ich noch. Wenn ich einen HKCU-Registry-Zweig mit runas.exe lade, dann lande ich zwar in dem
HKCU-Zweig aber zwangsweise des Benutzers Administrator, obwohl ich den Schalter /env (behält die aktuelle
Umgebung, anstatt diejenige des angegebenen Benutzers) verwende. Sehr enttäuschend.
Nee, korrekt. Umgebung ist das Environment mit den Umgebungsvariablen.
Im HKU-Zweig findest du auch unter dem entsprechenden SID den Zweig des auch angemeldeten Benutzers, aus dessen Kontext du runas aufgerufen hast.
Und da kannst du deine Änderungen vornehmen.
Gruß
Hallo
Ich hätte dazu eine Frage.
In meiner Verknüpfung muß hinter der exe noch ein -vx.x.x.x
Ich habe schon mit den " " rumexperimentiert, leider bisher ohne Erfolg.
Endweder fehlt dann der Zusatz -v, oder der Shortcut wird nicht erstellt, weil beim erstellen eine Fehlermeldung in der Batch kommt.
Danke schon mal
Gruß sugram
Ich hätte dazu eine Frage.
In meiner Verknüpfung muß hinter der exe noch ein -vx.x.x.x
Ich habe schon mit den " " rumexperimentiert, leider bisher ohne Erfolg.
Endweder fehlt dann der Zusatz -v, oder der Shortcut wird nicht erstellt, weil beim erstellen eine Fehlermeldung in der Batch kommt.
Danke schon mal
Gruß sugram
Hallo sugram!
Da damit ein zu übergebender Parameter gemeint sein dürfte: Verknüpfungen erstellen
Im übrigen wäre eine konkrete Beschreibung (des Batches und der Fehlermeldung) hilfreich ...
Grüße
bastla
Da damit ein zu übergebender Parameter gemeint sein dürfte: Verknüpfungen erstellen
Im übrigen wäre eine konkrete Beschreibung (des Batches und der Fehlermeldung) hilfreich ...
Grüße
bastla
Hallo evinben,
ich hab einfach keine Ahnung wo ich in den VBS teil der batch-Datei die Parameter , hier in meinen Fall " -game ..." eintragen soll, mit dem die .exe gestartet wird, damit sie auf die Ressourcen eines anderen Ordners zugreifen kann (der Teil ist jetzt hier nicht wichtig).
Ich möchte die Datei nähmlich als .exe kompilieren, damit sie das für andere alleine tut. Aber sonst funktioniert alles prima =)
ich hab einfach keine Ahnung wo ich in den VBS teil der batch-Datei die Parameter , hier in meinen Fall " -game ..." eintragen soll, mit dem die .exe gestartet wird, damit sie auf die Ressourcen eines anderen Ordners zugreifen kann (der Teil ist jetzt hier nicht wichtig).
Ich möchte die Datei nähmlich als .exe kompilieren, damit sie das für andere alleine tut. Aber sonst funktioniert alles prima =)
Hallo.
Dieses Script hat mir sehr geholfen und funktioniert Einwandfrei!
Eine Herausforderung habe ich da allerdings noch:
Ich möchte dass im "Ziel", also "TargetPath" vor dem "%progdir%\%progexe%" folgendes steht:
"C:\Windows\System32\runas.exe /savedcred /env /user:administrator"
Also zusammen soll es dann so aussehen:
C:\Windows\System32\runas.exe /savedcred /env /user:administrator "%progdir%\%progexe%"
Was ich bisher erfolglos versucht habe:
- manuell in die Zeile TargetPath meinen Wunschzusatz eingetragen
- alternativ zum C:\Windows den %windir% verwendet
- meinen Wunschzusatz als set "adminbefehl=C:\Windows\System32\runas.exe /savedcred /env /user:administrator" und anschließend bei TargetPath als %adminbefehl% vorne eingefügt
Ich verzweifle langsam....
Kann mir jemand dabei helfen?
Dieses Script hat mir sehr geholfen und funktioniert Einwandfrei!
Eine Herausforderung habe ich da allerdings noch:
Ich möchte dass im "Ziel", also "TargetPath" vor dem "%progdir%\%progexe%" folgendes steht:
"C:\Windows\System32\runas.exe /savedcred /env /user:administrator"
Also zusammen soll es dann so aussehen:
C:\Windows\System32\runas.exe /savedcred /env /user:administrator "%progdir%\%progexe%"
Was ich bisher erfolglos versucht habe:
- manuell in die Zeile TargetPath meinen Wunschzusatz eingetragen
- alternativ zum C:\Windows den %windir% verwendet
- meinen Wunschzusatz als set "adminbefehl=C:\Windows\System32\runas.exe /savedcred /env /user:administrator" und anschließend bei TargetPath als %adminbefehl% vorne eingefügt
Ich verzweifle langsam....
Kann mir jemand dabei helfen?
Ich habe es nun selbst behoben bekommen.
Der Code sieht nun wie folgt aus:
Und falls sich jemand fragen sollte, wozu das gut ist:
Wenn man an einem PC ohne Adminrechte arbeitet, hat man ggf. Probleme damit, Programme auszuführen die Adminrechte benötigen.
Die auf die Art angelegte Verknüpfung wird unter dem Adminaccount ausgeführt, ohne dass der User das Passwort eingeben muss.
Der Code sieht nun wie folgt aus:
:: Dies erstellt eine Verknüpfung des Programms
@echo off & setlocal
set zielpfad=Zielpfad
set progtitel=Programmname
set progdir=Pfad zum Programmm
set progexe=Programmname.exe
set runas=%windir%\System32\runas.exe
set savedcred=/savedcred /env /user:administrator ""%progdir%\%progexe%""
>%temp%\MakeShortCut.vbs echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs
>>%temp%\MakeShortCut.vbs echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs
>>%temp%\MakeShortCut.vbs echo objShortcut.TargetPath="%runas%">>%temp%\MakeShortCut.vbs
>>%temp%\MakeShortCut.vbs echo objShortcut.Arguments="%savedcred%">>%temp%\MakeShortCut.vbs
>>%temp%\MakeShortCut.vbs echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs
>>%temp%\MakeShortCut.vbs echo objShortcut.IconLocation = "Pfad zum Programm\Programmname.exe,0">>%temp%\MakeShortCut.vbs
>>%temp%\MakeShortCut.vbs echo objShortcut.Save>>%temp%\MakeShortCut.vbs
cscript //nologo %temp%\MakeShortCut.vbs
Und falls sich jemand fragen sollte, wozu das gut ist:
Wenn man an einem PC ohne Adminrechte arbeitet, hat man ggf. Probleme damit, Programme auszuführen die Adminrechte benötigen.
Die auf die Art angelegte Verknüpfung wird unter dem Adminaccount ausgeführt, ohne dass der User das Passwort eingeben muss.
seltsam, dass ich keine Benachrichtigungen über neue Kommentare vom ADMINISTRATOR-Forum erhalten habe, sonst hätte ich gerne dem Mitglied Ertgtct noch damals auf seine Frage vom 04.02.2013 geantwortet.
Auch keine Benachrichtigung über die neue Frage (über den Kommentar) von DerKamiKatze vom 21.09.2017 habe ich erhalten, was darauf hindeutet, dass die Aussetzer im ADMINISTRATOR-Forum weiterhin vorhanden sind.
Erst heute um 9:55 Uhr ist eine Benachrichtigungs-E-Mail vom ADMINISTRATOR-Forum eingegangen.
Auch keine Benachrichtigung über die neue Frage (über den Kommentar) von DerKamiKatze vom 21.09.2017 habe ich erhalten, was darauf hindeutet, dass die Aussetzer im ADMINISTRATOR-Forum weiterhin vorhanden sind.
Erst heute um 9:55 Uhr ist eine Benachrichtigungs-E-Mail vom ADMINISTRATOR-Forum eingegangen.
Hallo DerKamiKatze,
schön, dass du es alleine geschafft hast.
Wieso gibst du die temporäre VBS.Datei sowohl am Anfang als auch am Ende jeder Zeile an?
Üblich wäre nur am Ende
oder nur am Anfang
Und mit
lässt sich die temporär erstellte Datei löschen, was das Ganze etwas sauberer macht.
Gruß
evinben
schön, dass du es alleine geschafft hast.
Wieso gibst du die temporäre VBS.Datei sowohl am Anfang als auch am Ende jeder Zeile an?
>>%temp%\MakeShortCut.vbs echo objShortcut.Save>>%temp%\MakeShortCut.vbs
Üblich wäre nur am Ende
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
oder nur am Anfang
>>%temp%\MakeShortCut.vbs echo objShortcut.Save
Und mit
del "%temp%\MakeShortCut.vbs"
Gruß
evinben
Aloha zusammen.
Danke @evinben - die Tipps zum Aufräumen habe ich beherzigt und erfolgreich angewendet!
Nun stehe ich vor einem neuen Problem, welches ich bisher nicht lösen konnte... :
Es steht eine firmeninterne Systemumstellung an, welche den bisher genutzten Pfad ändert - das an sich ist okay, ABER der neue Pfad enthält einen Umlaut... In meinem Fall ein "ü".
Alle Versuche, den Umlaut umzuwandeln, funktionierten zwar innerhalb der Batch-Datei, jedoch nicht im vbs script... Bedeutet dass der unter "progdir" angelegte Pfad später in der Verknüpfung unter "Ziel" bzw. "Ausführen in" unsauber dargestellt wird.. Konkret wird das "ü" einfach nicht geschrieben.
Hat jemand eine Idee?
Kann ja nix schweres sein... Aber für heute bin ich durch mit meinem Latein.
Vielen Dank vorab!
Danke @evinben - die Tipps zum Aufräumen habe ich beherzigt und erfolgreich angewendet!
Nun stehe ich vor einem neuen Problem, welches ich bisher nicht lösen konnte... :
Es steht eine firmeninterne Systemumstellung an, welche den bisher genutzten Pfad ändert - das an sich ist okay, ABER der neue Pfad enthält einen Umlaut... In meinem Fall ein "ü".
Alle Versuche, den Umlaut umzuwandeln, funktionierten zwar innerhalb der Batch-Datei, jedoch nicht im vbs script... Bedeutet dass der unter "progdir" angelegte Pfad später in der Verknüpfung unter "Ziel" bzw. "Ausführen in" unsauber dargestellt wird.. Konkret wird das "ü" einfach nicht geschrieben.
Hat jemand eine Idee?
Kann ja nix schweres sein... Aber für heute bin ich durch mit meinem Latein.
Vielen Dank vorab!
Hallo @DerKamiKatze,
anbei eine Hilfe als Batch-Skript (rein als Beispiel) und solltest du analytisch doch nicht zurecht kommen, melde dich gerne erneut:
Viel Erfolg!
anbei eine Hilfe als Batch-Skript (rein als Beispiel) und solltest du analytisch doch nicht zurecht kommen, melde dich gerne erneut:
:Ziel der Verknüpfung erfahren
:~~~~~~~~~~~~~~~~~~~~~~~~~
@echo off
setlocal enabledelayedexpansion
setlocal
@prompt -$G
chcp 1252 >nul
PushD %~dp0
:Ziel der Verknüpfung abfragen, um die Verknüpfungsdatei/den Verknüpfungsordner zu kopieren
:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Verknüpfung eingeben
set "LinkFile=Den Namen einer Datei (ohne Erweiterung) erhalten.bat (z. B. für den Namen einer Verknüpfung).lnk"
:Über das temporär erzeugte VBS-Skript das Ziel der Verknüpfung abfragen
set "TempVBSkriptFile=%temp%\GetTargetPath.vbs"
>%TempVBSkriptFile% echo WScript.Echo CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(0)).TargetPath
for /f "delims=" %%i in ('cscript //nologo "%TempVBSkriptFile%" "%LinkFile%"') do set File=%%~nxi& set FileDirectory=%%~dpi& set TargetPath=%%~i
goto :M1
:Umlauten durch ASCII Zeichen ersetzen
:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Da der Pfad vom VBS-Skript in ANSI-Zeichen ausgegeben wird, kann er wegen den Umlauten von den (meisten) Befehlen nicht verarbeitet werden.
:Vor dem Fortsetzen müssen alle Umlauten in der Zeichenfolge durch ASCII-Zeichen ersetzt werden.
set NoUmlaut=%1
set NoUmlaut=%NoUmlaut:Ž=Ä%
set NoUmlaut=%NoUmlaut:„=ä%
set NoUmlaut=%NoUmlaut:™=Ö%
set NoUmlaut=%NoUmlaut:”=ö%
set NoUmlaut=%NoUmlaut:=ü%
set NoUmlaut=%NoUmlaut:š=Ü%
set NoUmlaut=%NoUmlaut:á=ß%
goto :eof
:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:M1
:Umlauten im Zielpfad ersetzen:
echo.
call :Umlauten "%File%"
set File=%NoUmlaut%
echo Datei: %File%
echo.
call :Umlauten "%FileDirectory%"
set FileDirectory=%NoUmlaut%
echo Verzeichnis: %FileDirectory%
echo.
call :Umlauten "%TargetPath%"
set TargetPath=%NoUmlaut%
echo Zielpfad: %TargetPath%
:echo %TargetPath%>tmp.txt
pause >nul
Viel Erfolg!
Danke für deinen Beitrag.
Nur leider fühle ich mich nun unwissender als vorher
Ich weiß, dass VB Scripte kein UTF-8 verstehen bzw. schreiben können... So weit bin ich auch gekommen.
Aber ich verstehe nicht, wie man es schafft, dass die Umlaute auch korrekt geschrieben werden.
Die Auflistung des obigen Codes interpretiere ich so, dass man eine (temporäre?) Liste der benötigten Umlaute erstellt - aber das wird doch nichts daran ändern, dass beim schreiben der Umlaute in der Verknüpfung diese nicht oder falsch geschrieben werden - oder?
Da beim verwendeten Script mittels vbs geschrieben wird, würde ich drauf tippen, dass man am besten einfach erst die Verknüpfung erstellt.
In meinem Fall würde ich alle Umlaute mit Platzhaltern versehen - im Falle des "ü" z.B. "AAA". Anschließend könnte man per Batch in den Verknüpfungen ja jedes "AAA" durch ein "ü" ersetzen... Wäre das ein einfacher Ansatz? Das könnte man ja alles in derselben Batch-Datei zusammenpacken, oder?
Hab ich einen Denkfehler oder bin ich heute einfach nur doof? ... hmm
Nur leider fühle ich mich nun unwissender als vorher
Ich weiß, dass VB Scripte kein UTF-8 verstehen bzw. schreiben können... So weit bin ich auch gekommen.
Aber ich verstehe nicht, wie man es schafft, dass die Umlaute auch korrekt geschrieben werden.
Die Auflistung des obigen Codes interpretiere ich so, dass man eine (temporäre?) Liste der benötigten Umlaute erstellt - aber das wird doch nichts daran ändern, dass beim schreiben der Umlaute in der Verknüpfung diese nicht oder falsch geschrieben werden - oder?
Da beim verwendeten Script mittels vbs geschrieben wird, würde ich drauf tippen, dass man am besten einfach erst die Verknüpfung erstellt.
In meinem Fall würde ich alle Umlaute mit Platzhaltern versehen - im Falle des "ü" z.B. "AAA". Anschließend könnte man per Batch in den Verknüpfungen ja jedes "AAA" durch ein "ü" ersetzen... Wäre das ein einfacher Ansatz? Das könnte man ja alles in derselben Batch-Datei zusammenpacken, oder?
Hab ich einen Denkfehler oder bin ich heute einfach nur doof? ... hmm
Hallo @DerKamiKatze
Keiner ist doof nur weil er was fragt, was er nicht weiß. Zumindest fragt er , was schon mal sehr gut ist!!! Statt klug zu schauen ... und nichts zu fragen ...
DerKamiKatze sende uns einfach das Skript, wie es aktuell ist, und beschreibe das Vorhaben und das Problem Schritt für Schritt: was du alles machen möchtest und was nicht funktioniert, alles an einer Stelle. Dann wird es transparenter und dir wird es sicherlich schnell geholfen.
Bis bald
Hab ich einen Denkfehler oder bin ich heute einfach nur doof?
Keiner ist doof nur weil er was fragt, was er nicht weiß. Zumindest fragt er , was schon mal sehr gut ist!!! Statt klug zu schauen ... und nichts zu fragen ...
DerKamiKatze sende uns einfach das Skript, wie es aktuell ist, und beschreibe das Vorhaben und das Problem Schritt für Schritt: was du alles machen möchtest und was nicht funktioniert, alles an einer Stelle. Dann wird es transparenter und dir wird es sicherlich schnell geholfen.
Bis bald
Guten Morgen.
Okay - über Nacht hat sich mein Fehler aufgelöst und die Ursache ist identifiziert: Wie so oft, ist es der Nutzer selbst (ich), der den Fehler verursachte...
Ich dachte mir gestern nämlich, dass es doch toll sei, wenn die Ausgabe der Anweisungen in der Batchdatei auch Umlaute wie z.B. "ü"anzeigen würde, anstatt dass ich "ue" schreibe... Also änderte ich die Codierung mit dem Befehl zu UTF-8.
Das an sich funktionierte hervorragend und alle Umlaute wurden nun im Batch-Fenster angezeigt! Jedoch führte es dazu, dass das VB Script, welches UTF-8 ja nicht "versteht", dadurch beim Schreiben der Parameter in der Verknüpfung die Umlaute falsch angab, und die Verknüpfungen nicht funktionierten (Statt "ü" wurde "ü" geschrieben).
Die Lösung: Codierung zurück auf ANSI gesetzt und über den Schönheitsfehler hinweggesehen. Und ZACK - schon wird die Verknüpfung auch korrekt angegeben - denn wider erwarten schreibt das Script auch ein "ü" problemlos in die Verknüpfungseigenschaften.
Ich werde nachher mal einen anonymisiertes Codebeispiel einfügen, damit man das gesamte Ausmaß des Projekts klar wird
Dennoch ergibt sich daraus eine neue Frage: Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?
Okay - über Nacht hat sich mein Fehler aufgelöst und die Ursache ist identifiziert: Wie so oft, ist es der Nutzer selbst (ich), der den Fehler verursachte...
Ich dachte mir gestern nämlich, dass es doch toll sei, wenn die Ausgabe der Anweisungen in der Batchdatei auch Umlaute wie z.B. "ü"anzeigen würde, anstatt dass ich "ue" schreibe... Also änderte ich die Codierung mit dem Befehl
chcp 65001
Das an sich funktionierte hervorragend und alle Umlaute wurden nun im Batch-Fenster angezeigt! Jedoch führte es dazu, dass das VB Script, welches UTF-8 ja nicht "versteht", dadurch beim Schreiben der Parameter in der Verknüpfung die Umlaute falsch angab, und die Verknüpfungen nicht funktionierten (Statt "ü" wurde "ü" geschrieben).
Die Lösung: Codierung zurück auf ANSI gesetzt und über den Schönheitsfehler hinweggesehen. Und ZACK - schon wird die Verknüpfung auch korrekt angegeben - denn wider erwarten schreibt das Script auch ein "ü" problemlos in die Verknüpfungseigenschaften.
Ich werde nachher mal einen anonymisiertes Codebeispiel einfügen, damit man das gesamte Ausmaß des Projekts klar wird
Dennoch ergibt sich daraus eine neue Frage: Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?
Aaalso - nun ist es soweit. Das Wunder ist vollbracht und funktioniert einwandfrei.
Der Code sieht wie folgt aus:
Das ist die Basis. Aus der heraus kann man wunderbar massenhaft Verknüpfungen erstellen lassen, welche dann auch noch mit Adminrechten ausgeführt werden - Wichtig: Der Admin muss beim Erststart 1x das Kennwort manuell eingeben.
Meine Batchdatei hat derzeit 1306 Zeilen und beinhaltet vier verschiedene Varianten der Verknüpfungserstellung, einen Changelog, einen Hilfeberich sowie "ASCII-Logos"
Ich erweitere das ganze noch deutlich mehr, aber das hat mit diesem Thema dann nichts mehr zu tun.
--
Bleibt nur noch eine Frage:
"Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?"
Der Code sieht wie folgt aus:
:: Dies erstellt eine Verknuepfung des [PROGRAMMS] im [ORDNER]
@echo off & setlocal
set zielpfad=[ZIELPFAD]
set progtitel=[NAME_DER_VERKNÜPFUNG]
set progdir=[PFAD_DER_AUSZUFÜHRENDEN_.EXE_DATEI]
set progexe=[NAME_DER_.EXE_DATEI].exe
set runas=%windir%\System32\runas.exe
set savecred=/savecred /env /user:administrator ""%progdir%\%progexe%""
echo Set objShell=WScript.CreateObject("Wscript.Shell")>>%temp%\MakeShortCut.vbs
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs
echo objShortcut.TargetPath="%runas%">>%temp%\MakeShortCut.vbs
echo objShortcut.Arguments="%savecred%">>%temp%\MakeShortCut.vbs
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs
echo objShortcut.IconLocation= "[PFAD_DER_.EXE_DATEI_DESSEN_SYMBOL_MAN_NUTZEN_MÖCHTE]\[NAME_DER_.EXE_DATEI].exe,0">>%temp%\MakeShortCut.vbs
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
cscript //nologo %temp%\MakeShortCut.vbs
del %temp%\MakeShortCut.vbs
:: Ende der Verknuepfungserstellung
Das ist die Basis. Aus der heraus kann man wunderbar massenhaft Verknüpfungen erstellen lassen, welche dann auch noch mit Adminrechten ausgeführt werden - Wichtig: Der Admin muss beim Erststart 1x das Kennwort manuell eingeben.
Meine Batchdatei hat derzeit 1306 Zeilen und beinhaltet vier verschiedene Varianten der Verknüpfungserstellung, einen Changelog, einen Hilfeberich sowie "ASCII-Logos"
Ich erweitere das ganze noch deutlich mehr, aber das hat mit diesem Thema dann nichts mehr zu tun.
--
Bleibt nur noch eine Frage:
"Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?"
Hallo @DerKamiKatze,
wunderbar!
Vielleicht hilft dir hier mein Beispiel weiter?
Viel Erfolg
wunderbar!
Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?
Vielleicht hilft dir hier mein Beispiel weiter?
:Autobefehlsanzeige ausschalten:
@echo off
:Zeilenanfang in der Eingabeaufforderung auf ">" kürzen (Zeilenausgabe ohne Pfade):
@prompt -$G
: CODE
:~~~~~~~~~~~~~~~~
:setlocal EnableDelayedExpansion
:setlocal DisableDelayedExpansion
:PushD %~dp0
echo.
set SrartCodePage=65001
chcp %SrartCodePage% >nul
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Test mit verschiedenen Codepages, um den Unterschied zu visualisieren zw.:
echo 1.Variante: Umschaltung von der einen in die andere Codepage, NACHDEM die Text-Variablen bereits gesetzt worden sind.
echo 2.Variante: Jeweils direkte Zuweisung der gewünschten Codepage, BEVOR die Text-Variablen gesetzt worden sind (ohne Doppelgemoppel und Verzerrung = die sauberere Lösung)
echo.
echo In diesem Beispiel werden die Codepages 65001 (Unicode), 1252 (Westeuropäisch) und 1251 (Kyrillisch) verwendet.
echo Es können auch andere Codepages verwendet werden (der Text in den Variablen kann dann bei Bedarf um andere Sprachen ergänzt werden)
echo.
echo Für besseres Verständnis das Batch-Skript einmal in ANSI und einmal in UTF-8 Zeichenkodierung ausführen
echo und anschließend die beiden Ausgabedateien miteinander vergleichen.
echo Bei beiden Zeichenkodierungen lässt sich der Text in der Ausgabedatei mit der 2. Variante bei allen drei Codepages einwandfrei lesen.
echo Mit der 1. Variante ist der Text nicht bei jeder Zeichenkodierung lesbar, z.B.:
echo Wenn die Zeichenkodierung der ausgegebenen Textdatei von UTF-8 auf ANSI umgeschaltet wird (z. B. im Notepad++ über "Kodierung > ANSI"),
echo wird der Text mit der Codepage 1252 (Westeuropäisch) normal lesbar. Die anderen beiden Texte,
echo mit den Codepages 65001 (Unicode) und 1251 (Kyrillisch), werden dagegen nicht korrekt lesbar.
echo.
echo Einfach die Codepage-Nummer in der Reihenfolge zueinander tauschen und experimentieren, was dann mit dem Text in der 1. Variante passiert!
echo Welche Codepage vor diesem Text gesetzt ist, hat nicht nur auf die Lesbarkeit dieses Textes in der CMD eine Bedeutung, sondern auch auf die nachfolgenden Ergebnisse.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Set Options
set OutputFileName=BatchAusgabe.txt
:/Set Options
set OutputFilePath="%~dp0%OutputFileName%"
:Aktuelle Codepage ermitteln (Prüfung)
for /f "tokens=3 delims=. " %%d in ('CHCP') do set CurrentCodepage=%%d
echo Start-Codepage: %CurrentCodepage%>%OutputFilePath%
echo.>>%OutputFilePath%
:Erklärung des Rätsels:
:Für den Text gesetzt in den nachfolgenden beiden Variablen wirkt sich die nacheinander abwechselnde Codepage aus!!!
:D. h. die Zeichen werden von der einen (die %SrartCodePage% oben) zu der anderen Codepage umgewandelt,
:was je nach Codepage-Unterstützug zu mehr oder weniger Informationsverlusten führt.
:Für den Text gesetzt in den namentlich gleichen Variablen in der Unterprozedur ":M10" ganz unten (die über den CALL-Aufruf abgearbeitet wird),
:wird der Text dagegen nicht erst zw. zwei Codepages umgewandelt, sondern direkt in die jeweilige Codepage geschrieben (die sauberere Lösung!),
:also ohne den Umweg mit der Übersetzung von der einen in die andere Codepage (was dann höchstwahrscheinlich
:zu ungewollten Überraschungen bei der Verarbeitung der Zeichen führt).
set DE_String=Muskatnuss Herr Müller! MUSKATNUSS!!!
set RU_String=Матрёшка
:Die gewünschten Codepages nacheinander abarbeiten. Deren Reihenfolge spielt eine Rolle für die 1.Variante (jedoch ohne Auswirkung auf die 2.Variante).
FOR %%d in (65001 1252 1251) do (
set CodePage=%%d
call :M5
call :M10
)
echo.
echo ENDE! Siehe Ergebnisse in der Ausgabedatei %OutputFilePath%
timeout /t 40 >nul
:pause >nul
goto :eof
:END ____________________________________________________
:M5
CHCP %CodePage% >nul
echo Codepage: %CodePage%>>%OutputFilePath%
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~>>%OutputFilePath%
echo 1.Variante: Umschaltung von der einen in die andere Codepage (von %SrartCodePage% auf %CodePage%):>>%OutputFilePath%
echo (Codepage-Zuweisung nach den Text-Variablen)>>%OutputFilePath%
echo DE %DE_String%>>%OutputFilePath%
echo RU %RU_String%>>%OutputFilePath%
goto :eof
:M10
echo.>>%OutputFilePath%
echo 2.Variante: Codepage-Zuweisung vor den Text-Variablen>>%OutputFilePath%
set DE_String=Muskatnuss Herr Müller! MUSKATNUSS!!!
set RU_String=Матрёшка
echo DE %DE_String%>>%OutputFilePath%
echo RU %RU_String%>>%OutputFilePath%
echo.>>%OutputFilePath%
goto :eof
Viel Erfolg
Guten Morgen.
Das mit dem temporären Schreiben in UTF-8 hat leider nicht geklappt. Habe mich mangels Zeit dazu entschlossen, dass Umlaute im klassischen "ue", "ae" usw, geschrieben werden.
Wie dem auch Sei... Ich habe eine neue Herausforderung, für dich ich noch keine Lösung finden konnte:
Kann man bei der Verknüpfungserstellung automatisch den Haken im Reiter "Kompatibilität" bei "als Administrator ausführen" setzen?
Hintergrund ist der, dass es Systeme gibt, die ohne den "savecred" Befehl auskommen, die Programme dennoch "als Admin ausgeführt" werden müssen. Dies sind autarke Systeme ohne tatsächlichen Adminaccount. D.h. wenn diese den "savecred" Befehl nutzen, poppt zwar eine einmalige Eingabe des Kennworts für den User "administrator" auf, da dieser jedoch nicht existiert, kommt der User da nicht weiter.
Danke vorab für alle Ideen/Vorschläge
Das mit dem temporären Schreiben in UTF-8 hat leider nicht geklappt. Habe mich mangels Zeit dazu entschlossen, dass Umlaute im klassischen "ue", "ae" usw, geschrieben werden.
Wie dem auch Sei... Ich habe eine neue Herausforderung, für dich ich noch keine Lösung finden konnte:
Kann man bei der Verknüpfungserstellung automatisch den Haken im Reiter "Kompatibilität" bei "als Administrator ausführen" setzen?
Hintergrund ist der, dass es Systeme gibt, die ohne den "savecred" Befehl auskommen, die Programme dennoch "als Admin ausgeführt" werden müssen. Dies sind autarke Systeme ohne tatsächlichen Adminaccount. D.h. wenn diese den "savecred" Befehl nutzen, poppt zwar eine einmalige Eingabe des Kennworts für den User "administrator" auf, da dieser jedoch nicht existiert, kommt der User da nicht weiter.
Danke vorab für alle Ideen/Vorschläge
Hallo @DerKamiKatze,
lies z.B. hier:
"How to create a Run As Administrator shortcut using Powershell"
https://stackoverflow.com/questions/28997799/how-to-create-a-run-as-admi ...
Gruß
lies z.B. hier:
"How to create a Run As Administrator shortcut using Powershell"
https://stackoverflow.com/questions/28997799/how-to-create-a-run-as-admi ...
Gruß
Guten Morgen.
Ich bin bei PowerShell ein absoluter Noob. Mich da rain zu fuchsen, steht noch auf meiner To-Do-Liste... Bis dahin gilt die Dumme Frage meinerseits:
Wie baue ich den befehl
in eine Batch Datei ein?
Ich bin bei PowerShell ein absoluter Noob. Mich da rain zu fuchsen, steht noch auf meiner To-Do-Liste... Bis dahin gilt die Dumme Frage meinerseits:
Wie baue ich den befehl
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$Home\Desktop\ColorPix.lnk")
$Shortcut.TargetPath = "C:\Program Files (x86)\ColorPix\ColorPix.exe"
$Shortcut.Save()
$bytes = [System.IO.File]::ReadAllBytes("$Home\Desktop\ColorPix.lnk")
$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON
[System.IO.File]::WriteAllBytes("$Home\Desktop\ColorPix.lnk", $bytes)
in eine Batch Datei ein?
So. Bitte verzeiht mir mein dummes Gefrage.. meist folgt erst darauf die Verbissenheit.
Die Lösung sieht wie folgt aus:
Auf diese Weise wird erst ein PowerShell Script im temporären Ordner erzeugt. Dieses Script erzeugt dann beim Ausführen mittels PowerShell eine Verknüpfung zur gewünschten .exe Datei im gewünschten Zielordner, welche jedoch pauschal den Haken bei "Als Administrator ausführen" gesetzt hat. Dies wird jedoch grafisch nicht angezeigt, wenn man dies unter Eigenschaften => Kompatibilität nachschaut. Ist aber da. Habe es soeben getestet und funktioniert einwandfrei!
So - nun schreibe ich das alles auf meine benötigten Stellen im Code um und kann dann ruhigen Gewissens ins Wochenende gehen!
Cheers!
Die Lösung sieht wie folgt aus:
echo $WshShell = New-Object -comObject WScript.Shell>>%temp%\DP_Server.ps1
echo $Shortcut = $WshShell.CreateShortcut("ORT UND NAME DEINER VERKNÜPFUNG.lnk")>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
echo $Shortcut.TargetPath = "ORT UND NAME DEINER .EXE DATEI.exe">>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
echo $Shortcut.Save()>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
echo $bytes = [System.IO.File]::ReadAllBytes("ORT UND NAME DEINER VERKNÜPFUNG.lnk")>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
echo $bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
echo [System.IO.File]::WriteAllBytes("ORT UND NAME DEINER VERKNÜPFUNG.lnk", $bytes)>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1"
del %temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
Auf diese Weise wird erst ein PowerShell Script im temporären Ordner erzeugt. Dieses Script erzeugt dann beim Ausführen mittels PowerShell eine Verknüpfung zur gewünschten .exe Datei im gewünschten Zielordner, welche jedoch pauschal den Haken bei "Als Administrator ausführen" gesetzt hat. Dies wird jedoch grafisch nicht angezeigt, wenn man dies unter Eigenschaften => Kompatibilität nachschaut. Ist aber da. Habe es soeben getestet und funktioniert einwandfrei!
So - nun schreibe ich das alles auf meine benötigten Stellen im Code um und kann dann ruhigen Gewissens ins Wochenende gehen!
Cheers!
Hallo,
einfach mit echo und mit > am Ende jeder Zeile, um jede diese Zeile in eine Datei zu schreiben:
einfach mit echo und mit > am Ende jeder Zeile, um jede diese Zeile in eine Datei zu schreiben:
set PowerShellFile=MeineErstePowerShelDateil.ps1
echo $WshShell = New-Object -comObject WScript.Shell>%PowerShellFile%
echo $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\ColorPix.lnk")>>%PowerShellFile%
echo und hier alle Restlichen Zeilen, welche in die PowerShell-Datei hingeschrieben werden müssen, mit der selben Struktur eintragen.
echo Nächste Zeile>>%PowerShellFile%
echo Nächste Zeile>>%PowerShellFile%
echo ...
echo Dann diese neue PowerShell-Datei aus dem Batch-Skript ausführen lassen
einfach mit echo und mit > am Ende jeder Zeile, um jede diese Zeile in eine Datei zu schreiben:
Vollkommen überflüssig, da reicht ein OnelinerPowershell -Executionpolicy ByPass -Command "$WshShell = New-Object -comObject WScript.Shell; $Shortcut = $WshShell.CreateShortcut(\"$Home\Desktop\ColorPix.lnk\"); $Shortcut.TargetPath = 'C:\Program Files (x86)\ColorPix\ColorPix.exe'; $Shortcut.Save(); $bytes = [System.IO.File]::ReadAllBytes(\"$Home\Desktop\ColorPix.lnk\"); $bytes[0x15] = $bytes[0x15] -bor 0x20; [System.IO.File]::WriteAllBytes(\"$Home\Desktop\ColorPix.lnk\",$bytes)"
Hallo DerKamiKatze,
mit >> bei allen darauf folgenden Zeilen ist richtig. Ich habe bloß auf der Schnelle (Copy&Paste) es dann nicht mehr ergänzt (bereits korrigiert).
Mit nur einem Größer-als-Zeichen (>) wird die Datei überschrieben
Mit zwei aufeinander folgenden Größer-als-Zeichen (>>) wird die Datei um jede Zeile ergänzt.
bitte nein, jedoch frag einfach ruhig nach und beleidige dich selbst nicht
mit >> bei allen darauf folgenden Zeilen ist richtig. Ich habe bloß auf der Schnelle (Copy&Paste) es dann nicht mehr ergänzt (bereits korrigiert).
Mit nur einem Größer-als-Zeichen (>) wird die Datei überschrieben
Mit zwei aufeinander folgenden Größer-als-Zeichen (>>) wird die Datei um jede Zeile ergänzt.
Darf ich mal blöde nachfragen ...
bitte nein, jedoch frag einfach ruhig nach und beleidige dich selbst nicht
Zitat von @138810:
einfach mit echo und mit > am Ende jeder Zeile, um jede diese Zeile in eine Datei zu schreiben:
Vollkommen überflüssig, da reicht ein Onliner> Powershell -Executionpolicy ByPass -Command "$WshShell = New-Object -comObject WScript.Shell; $Shortcut = $WshShell.CreateShortcut(\"$Home\Desktop\ColorPix.lnk\"); $Shortcut.TargetPath = 'C:\Program Files (x86)\ColorPix\ColorPix.exe'; $Shortcut.Save(); $bytes = [System.IO.File]::ReadAllBytes(\"$Home\Desktop\ColorPix.lnk\"); $bytes[0x15] = $bytes[0x15] -bor 0x20; [System.IO.File]::WriteAllBytes(\"$Home\Desktop\ColorPix.lnk\",$bytes)"
>
Interessant. Da ich - wie gesagt - ein "PowerShell n00b", bin nehme ich dies erstmal nur zur Kenntnis. Mein inzwischen 11.478 Zeilen langer Code in der .bat Datei wird irgendwann gänzlich in PowerShell geschrieben. Aber das mache ich erst, wenn ich dahingehend mehr gelernt habe.
Zitat von @evinben:
ein "onliner" ist für vieles scheinbar etwas ganz cooles. Aber die Übersicht? Diese ist ja bei der virtuellen Wellt sehr wichtig.
Mit einer Befehlszeile ist die Verarbeitung nicht etwa spürend schneller.
Vollkommen überflüssig, da reicht ein Onliner
ein "onliner" ist für vieles scheinbar etwas ganz cooles. Aber die Übersicht? Diese ist ja bei der virtuellen Wellt sehr wichtig.
Mit einer Befehlszeile ist die Verarbeitung nicht etwa spürend schneller.
Okay. D.h. ob Oneliner oder alles in separate Zeilen - spielt für die Funktionalität keine Rolle?