Umboot VBS mit Menüauswahl
Mit Menüauswahl vor dem Booten
Hallo, ich hab hier ein VBS Script, mit dem ich in der Lage bin aus Wndows heraus meine entsprechenden
Betriebssysteme zu booten.
Kleines Manko an diesem VBS ist, dass ich nachdem ich die Auswahl für das zu bootende Os getroffen habe
nach dem Neustart keine Möglichkeit mehr habe das zu bootende Os auszuwählen, für den Fall dass ich mich kurzfristig umentscheide.
Lässt sich das hier irgendwie realisieren?
Am Besten noch mit einem Timeout von 15 Sekunden.
Hier der Code
Set Myshell = WScript.CreateObject("WScript.Shell")
Set Myfolder = CreateObject ("Scripting.FileSystemObject")
On Error Resume Next
'Die folgenden drei Werte können angepasst werden
'
Bootini = "C:\Boot.INI"
Bootbak = "C:\Boot.ORI"
TimeOut = 15
'
If (MyFolder.FileExists(Bootbak)) Then
MyFolder.CopyFile Bootbak, Bootini, True
End If
Set Bootread = Myfolder.OpenTextFile(Bootini, 1, false)
Do While Bootread.AtEndOfStream <> True
Zeilenzahl=Zeilenzahl+1
Bootread.SkipLine
Loop
Bootread.Close
ReDim Os(Zeilenzahl)
Set Bootread = Myfolder.OpenTextFile(Bootini, 1, false)
Do Until Bootread.AtEndOfStream = True
n=n+1
Os(n) = Bootread.ReadLine
Loop
Bootread.Close
For n=1 to Zeilenzahl
If Os(n) = "[operating systems]" Then
OsZeile = n+1
ElseIf InStr(1, Os(n), "timeout=", 1) = 1 Then
ToutZeile = n
ElseIf InStr(1, Os(n), "default=", 1) = 1 Then
DefZeile = n
End If
Diff = DefZeile-ToutZeile
Next
ReDim ClearName(Zeilenzahl)
ReDim SysName(Zeilenzahl)
For n = OsZeile to Zeilenzahl
Namepos = InStr(Os(n), "=")
SysName(n) = left(Os(n), Namepos - 1)
ClearName(n) = Mid(Os(n), Namepos + 2)
AnfPos = InStr(1, ClearName(n), Chr(34), 1)
ClearName(n) = Mid(ClearName(n), 1, Anfpos-1)
Liste = Liste +vbcr +vbcr & n-OsZeile+1 & ". " & ClearName(n)
Next
Umboot = InputBox("Welches Betriebsystem soll gestartet werden? Geben Sie bitte die entsprechnde Zahl ein." +vbcr+vbcr & "0. Nur herunterfahren" & Liste , "Umboot-Menü für Windows 98/98SE/ME/2000/XP", 0)
MyFolder.CopyFile Bootini, Bootbak, True
If Umboot = "" Then
Wscript.quit
ElseIf Umboot = 0 Then
a = MsgBox("Wollen Sie den Rechner wirklich herunterfahren?", 4, "herunterfahren?")
If a = 7 Then wscript.quit
BsName = MyShell.Regread("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductName")
If BsName = "Microsoft Windows 98" or BsName = "Microsoft Windows ME" Then
MyShell.Run("rundll32.exe shell32.dll,SHExitWindowsEx 1")
Else
Set Bsse = GetObject("winmgmts:{(Shutdown)}./root/cimv2"). _
ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each Bs In Bsse
Bs.shutdown
Next
End If
wscript.quit
End If
m = Umboot + OsZeile - 1
a = MsgBox("Wollen Sie wirklich das Aktuelle OS beenden und " & ClearName(m) & " starten?", 4, "Umbooten?")
If a = 7 Then wscript.quit
Set Bootwrite = Myfolder.OpenTextFile(Bootini, 2, false)
If Diff > 0 Then
First = ToutZeile
Sec = DefZeile
ElseIf Diff < 0 Then
First = DefZeile
Sec = ToutZeile
End If
For n=1 to First-1
BootWrite.WriteLine Os(n)
Next
BootWrite.Writeline "timeout=" & TimeOut
For n= First+1 to Sec-1
BootWrite.Writeline Os(n)
Next
Bootwrite.Writeline "default=" & SysName(m)
For n = Sec+1 to Zeilenzahl
Bootwrite.Writeline Os(n)
Next
BsName = MyShell.Regread("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductName")
If BsName = "Microsoft Windows 98" or BsName = "Microsoft Windows ME" Then
MyShell.Run("rundll32.exe shell32.dll,SHExitWindowsEx 2")
Else
Set Bsse = GetObject("winmgmts:{(Shutdown)}./root/cimv2"). _
ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each Bs In Bsse
Bs.reboot
Next
End if
Hier habe ich nur da Problem, dass das Menü nicht angezeigt wird und sich der PC
nicht die Eingabe merkt, die ich unter Windows gemacht habe.
Lässt sich das irgendwie ändern?
Danke schon mal für Eure Hilfe.
Grüße, robcomboy
Hallo, ich hab hier ein VBS Script, mit dem ich in der Lage bin aus Wndows heraus meine entsprechenden
Betriebssysteme zu booten.
Kleines Manko an diesem VBS ist, dass ich nachdem ich die Auswahl für das zu bootende Os getroffen habe
nach dem Neustart keine Möglichkeit mehr habe das zu bootende Os auszuwählen, für den Fall dass ich mich kurzfristig umentscheide.
Lässt sich das hier irgendwie realisieren?
Am Besten noch mit einem Timeout von 15 Sekunden.
Hier der Code
Set Myshell = WScript.CreateObject("WScript.Shell")
Set Myfolder = CreateObject ("Scripting.FileSystemObject")
On Error Resume Next
'Die folgenden drei Werte können angepasst werden
'
Bootini = "C:\Boot.INI"
Bootbak = "C:\Boot.ORI"
TimeOut = 15
'
If (MyFolder.FileExists(Bootbak)) Then
MyFolder.CopyFile Bootbak, Bootini, True
End If
Set Bootread = Myfolder.OpenTextFile(Bootini, 1, false)
Do While Bootread.AtEndOfStream <> True
Zeilenzahl=Zeilenzahl+1
Bootread.SkipLine
Loop
Bootread.Close
ReDim Os(Zeilenzahl)
Set Bootread = Myfolder.OpenTextFile(Bootini, 1, false)
Do Until Bootread.AtEndOfStream = True
n=n+1
Os(n) = Bootread.ReadLine
Loop
Bootread.Close
For n=1 to Zeilenzahl
If Os(n) = "[operating systems]" Then
OsZeile = n+1
ElseIf InStr(1, Os(n), "timeout=", 1) = 1 Then
ToutZeile = n
ElseIf InStr(1, Os(n), "default=", 1) = 1 Then
DefZeile = n
End If
Diff = DefZeile-ToutZeile
Next
ReDim ClearName(Zeilenzahl)
ReDim SysName(Zeilenzahl)
For n = OsZeile to Zeilenzahl
Namepos = InStr(Os(n), "=")
SysName(n) = left(Os(n), Namepos - 1)
ClearName(n) = Mid(Os(n), Namepos + 2)
AnfPos = InStr(1, ClearName(n), Chr(34), 1)
ClearName(n) = Mid(ClearName(n), 1, Anfpos-1)
Liste = Liste +vbcr +vbcr & n-OsZeile+1 & ". " & ClearName(n)
Next
Umboot = InputBox("Welches Betriebsystem soll gestartet werden? Geben Sie bitte die entsprechnde Zahl ein." +vbcr+vbcr & "0. Nur herunterfahren" & Liste , "Umboot-Menü für Windows 98/98SE/ME/2000/XP", 0)
MyFolder.CopyFile Bootini, Bootbak, True
If Umboot = "" Then
Wscript.quit
ElseIf Umboot = 0 Then
a = MsgBox("Wollen Sie den Rechner wirklich herunterfahren?", 4, "herunterfahren?")
If a = 7 Then wscript.quit
BsName = MyShell.Regread("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductName")
If BsName = "Microsoft Windows 98" or BsName = "Microsoft Windows ME" Then
MyShell.Run("rundll32.exe shell32.dll,SHExitWindowsEx 1")
Else
Set Bsse = GetObject("winmgmts:{(Shutdown)}./root/cimv2"). _
ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each Bs In Bsse
Bs.shutdown
Next
End If
wscript.quit
End If
m = Umboot + OsZeile - 1
a = MsgBox("Wollen Sie wirklich das Aktuelle OS beenden und " & ClearName(m) & " starten?", 4, "Umbooten?")
If a = 7 Then wscript.quit
Set Bootwrite = Myfolder.OpenTextFile(Bootini, 2, false)
If Diff > 0 Then
First = ToutZeile
Sec = DefZeile
ElseIf Diff < 0 Then
First = DefZeile
Sec = ToutZeile
End If
For n=1 to First-1
BootWrite.WriteLine Os(n)
Next
BootWrite.Writeline "timeout=" & TimeOut
For n= First+1 to Sec-1
BootWrite.Writeline Os(n)
Next
Bootwrite.Writeline "default=" & SysName(m)
For n = Sec+1 to Zeilenzahl
Bootwrite.Writeline Os(n)
Next
BsName = MyShell.Regread("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductName")
If BsName = "Microsoft Windows 98" or BsName = "Microsoft Windows ME" Then
MyShell.Run("rundll32.exe shell32.dll,SHExitWindowsEx 2")
Else
Set Bsse = GetObject("winmgmts:{(Shutdown)}./root/cimv2"). _
ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each Bs In Bsse
Bs.reboot
Next
End if
Hier habe ich nur da Problem, dass das Menü nicht angezeigt wird und sich der PC
nicht die Eingabe merkt, die ich unter Windows gemacht habe.
Lässt sich das irgendwie ändern?
Danke schon mal für Eure Hilfe.
Grüße, robcomboy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 56139
Url: https://administrator.de/forum/umboot-vbs-mit-menueauswahl-56139.html
Ausgedruckt am: 23.12.2024 um 20:12 Uhr
4 Kommentare
Neuester Kommentar
Kleines Manko an diesem VBS ist, dass ich nachdem ich die Auswahl für das zu
bootende Os getroffen habe nach dem Neustart keine Möglichkeit
mehr habe das zu bootende Os auszuwählen, für den Fall dass ich
mich kurzfristig umentscheide.
bootende Os getroffen habe nach dem Neustart keine Möglichkeit
mehr habe das zu bootende Os auszuwählen, für den Fall dass ich
mich kurzfristig umentscheide.
STRG-Taste festhalten.
Ob shutdown oder rundll benutzt werden muss zum Neustart, kann man auch über das Environment feststellen: Bei Win9x ist die Environmentvariable OS nicht vorhanden.
Warum eigentlich so kompliziert? 5 x boot.ini erstellt, je 1 für das entsprechende OS mit veränderter Zeile default= und per Batch umkopieren auf C:\Boot.ini.
Man listet die möglichen Systeme per echo auf und erstellt mit choice (choice /?) eine Abfrage, welches System gestartet werden soll.
Dann kopiert man die entsprechende dazu passende Boot.xxx mit copy nach c:\boot.ini und ruft shutdown bzw. rundll32 ..... auf, je nachdem, ob die Variable OS vorhanden ist.
Informationen zu Batchdateien und Befehlszeilenreferenz findet man in der Hilfe zu Windows XP.
Dann kopiert man die entsprechende dazu passende Boot.xxx mit copy nach c:\boot.ini und ruft shutdown bzw. rundll32 ..... auf, je nachdem, ob die Variable OS vorhanden ist.
Informationen zu Batchdateien und Befehlszeilenreferenz findet man in der Hilfe zu Windows XP.