robcomboy
Goto Top

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

Content-Key: 56139

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

Printed on: April 25, 2024 at 01:04 o'clock

Mitglied: 46503
46503 Apr 09, 2007 at 00:29:29 (UTC)
Goto Top
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.

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.
Member: robcomboy
robcomboy Apr 09, 2007 at 00:33:01 (UTC)
Goto Top
und per Batch umkopieren auf
C:\Boot.ini.

Wie lässt sich sowas denn realisieren? Hab nicht wirklich Ahnung vom
Batch Programmieren.
Mitglied: 46503
46503 Apr 09, 2007 at 00:45:56 (UTC)
Goto Top
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.
Member: robcomboy
robcomboy Apr 09, 2007 at 00:52:05 (UTC)
Goto Top
Ok, danke ich mach mich da ma dran.
Grüße, robcomboy