Berechtigung für vbs-Script auf dem Systemlaufwerk
Hallo,
folgender VBS-Code zum Umbenennen einer EXE-Datei funktioniert tadellos,
nur nicht im Programme- oder Windows-Verzeichnis des Systemlaufwerkes.
Fehlermeldung: Erlaubnis verweigert
Das Script startet doch schon mit erhöhten Rechten!
Schönen Advent noch
Peter
folgender VBS-Code zum Umbenennen einer EXE-Datei funktioniert tadellos,
nur nicht im Programme- oder Windows-Verzeichnis des Systemlaufwerkes.
Fehlermeldung: Erlaubnis verweigert
Das Script startet doch schon mit erhöhten Rechten!
'rename_with_version.vbs
'
Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
WScript.Quit
End if
Dim arg, folder, fso, objShell, bname, ext, destination, fileversion
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
If WScript.Arguments.Count > 0 Then
arg = WScript.Arguments(0)
Else
MsgBox "Keine Datei übergeben!",vbExclamation
WScript.Quit 1
End If
If fso.FileExists(arg) Then
folder = fso.GetParentFolderName(arg)
bname = fso.GetBaseName(arg)
ext = fso.GetExtensionName(arg)
fileversion = objShell.NameSpace(folder).ParseName(fso.GetFileName(arg)).ExtendedProperty("{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 4")
If fileversion <> "" Then
destination = folder & "\" & bname & "." & fileversion & "." & ext
fso.MoveFile arg, destination
Else
MsgBox "Versionsinfo ist leer!",vbExclamation
End If
Else
MsgBox "Datei '" & arg & "' existiert nicht.", vbExclamation
WScript.Quit 1
End If
Schönen Advent noch
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1611958285
Url: https://administrator.de/contentid/1611958285
Ausgedruckt am: 19.12.2024 um 13:12 Uhr
14 Kommentare
Neuester Kommentar
Schau mal hier:
https://stackoverflow.com/questions/17466681/how-to-run-vbs-as-administr ...
Es kann zwar sein, dass Du das Script als Admin laufen lässt, aber die UAC macht Dir dennoch einen Strich durch die Rechnung, weil der Admin nicht alles darf.
Es muss mit erhöhten Rechten laufen.
Gruß
bdmvg
https://stackoverflow.com/questions/17466681/how-to-run-vbs-as-administr ...
Es kann zwar sein, dass Du das Script als Admin laufen lässt, aber die UAC macht Dir dennoch einen Strich durch die Rechnung, weil der Admin nicht alles darf.
Es muss mit erhöhten Rechten laufen.
Gruß
bdmvg
Zitat von @PeterleB:
Also warum hat das Script in Systemverzeichnissen keine Berechtigung, eine Datei (hier *.exe, ist in der Registry als Kontextmenü verlinkt) umzubenennen?
Weil elevated Kontextmenü Extensions mit einem speziellen Admin-Flag in der Registry versehen werden sollten.Also warum hat das Script in Systemverzeichnissen keine Berechtigung, eine Datei (hier *.exe, ist in der Registry als Kontextmenü verlinkt) umzubenennen?
"HasLUAShield"
https://winaero.com/add-run-as-administrator-context-menu-item-to-msi-fi ...
Dann entfällt auch das elevieren im Skript selbst, weil das von Windows forciert wird.
folgender VBS-Code zum Umbenennen einer EXE-Datei funktioniert tadellos,
Übrigens hat dein Skript einen gravierenden logischen Fehler und x redundante Objektedeklarationen ...Mal wieder ein copy & paste Opfer . Einfach nochmal grundlegend durchlesen dann sollte es dir hoffentlich selbst auffallen.Zitat von @PeterleB:
Hallo,
die Methode mit runas / "HasLUAShield" würde ja generell für all vbs-Scripte gelten.
Nein, Blödsinn! Das Setting muss natürlich nur im Reg-Zweig für deinen Kontextmenü-Eintrag gesetzt werden und im Skript kann dann das elevieren entfallen!Hallo,
die Methode mit runas / "HasLUAShield" würde ja generell für all vbs-Scripte gelten.
Zitat von @PeterleB:
Habe im Script noch einiges umgeschrieben (redundante Deklarationen, Abfrage Produktversion), aber den "grundlegend logischen Fehler" entdecke ich nicht.
Na "RunAsAdministrator" ist ja wohl kaum ein vollqualifizierter Pfad, kann also niemals funktionieren eben weil du dieses Argument an "arg" übergibst.Habe im Script noch einiges umgeschrieben (redundante Deklarationen, Abfrage Produktversion), aber den "grundlegend logischen Fehler" entdecke ich nicht.
Des weiteren sagte ich ja oben, das elevieren ist dann überflüssig wenn man den Luashield Eintrag für den Kontextmenü Eintrag setzt..
Zitat von @PeterleB:
Nach meinen Recherchen legt "HasLUAShield" nur das Kontextmenü-Icon fest, wenn kein anderes angegeben ist, wirkt sich also nicht auf die Ausführung mit erhöhten Rechten aus.
Ließ den Beitrag oben genauer, der Command ist im "runas" Zweig abgelegt und das wird per Default elevated ausgeführt. Der LuaShield ist natürlich nur das Icon. Alter liest hier denn keiner mehr vernünftig Artikel die man postet?? Ist ja wie im Kindergarten hier.Nach meinen Recherchen legt "HasLUAShield" nur das Kontextmenü-Icon fest, wenn kein anderes angegeben ist, wirkt sich also nicht auf die Ausführung mit erhöhten Rechten aus.
Außerdem wird in deinem Skript (Zeile 25) ebenfalls der Elevation Abschnitt durch die If Abfrage sowieso niemals erreicht weil du dem Skript ja immer ein Argument übergibst! Das ist der eigentliche logische Fehler hier.