invisan
Goto Top

Nach Funktion Revstr wird aufeinmal eine Leerzeile hinzugefügt VBS

Hallo zusammen,

ich habe mal wieder ein kleines Problem.

Ich habe in VBS ein kleines Script geschrieben welches dazu dienen soll einen Output einer WMIC Variable umzudrehen und nach Lowercaps zu konvertieren.
Leider funktioniert das ganze nicht denn nach dem umwandeln wird der Output auf einmal in 2 Zeilen statt einer ausgegeben.

Hier das Skript.


Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("wmic bios get serialnumber /VALUE")
Set objStdOut = objWshScriptExec.StdOut

While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If InStr(strLine,"=") Then
newstr = Replace(strLine,"SerialNumber=","")
revstr = StrReverse(newstr)
lstr = LCase(revstr)
WScript.Echo "Normal ="&newstr
WScript.Echo "Reverse ="&revstr
WScript.Echo "Revlow ="&lstr
End If
Wend


Ich hoffe mir kann jemand helfen das Problem zu finden und zu lösen. Ich vermute es hängt mit der Ausgabe von WMIC zusammen denn dort werden Leerzeilen mit ausgegeben.


Mit freundlichen Grüßen,

Invisan

Content-ID: 226731

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

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

colinardo
colinardo 15.01.2014 aktualisiert um 11:26:44 Uhr
Goto Top
Hallo Invisan,
in den Zeilen von "StdOut" sind in den Zeilen zusätzlich die Zeilenumbrüche enthalten. Diesen musst du noch entfernen:
Set objShell = CreateObject("WScript.Shell")  
Set objWshScriptExec = objShell.Exec("wmic bios get serialnumber /VALUE")  
Set objStdOut = objWshScriptExec.StdOut

While Not objStdOut.AtEndOfStream
	strLine = objStdOut.ReadLine
	If InStr(1,strLine,"=",1) Then  
		newstr = Left(strLine,Len(strLine)-1)
		newstr = Replace(newstr,"SerialNumber=","",1,-1,1)  
		revstr = StrReverse(newstr)
		lstr = LCase(revstr)
		WScript.Echo "Normal =" & newstr  
		WScript.Echo "Reverse =" & revstr  
		WScript.Echo "Revlow =" & lstr  
	End If
Wend

p.s. geht auch einfacher direkt via WMI (siehe weiter unten)

Grüße Uwe
Invisan
Invisan 15.01.2014 um 11:13:42 Uhr
Goto Top
Zitat von @colinardo:

Hallo Invisan,
in den Zeilen von "StdOut" sind in den Zeilen zusätzlich die Zeilenumbrüche enthalten. Diesen musst du noch
entfernen:
> Set objShell = CreateObject("WScript.Shell")  
> Set objWshScriptExec = objShell.Exec("wmic bios get serialnumber /VALUE")  
> Set objStdOut = objWshScriptExec.StdOut
> 
> While Not objStdOut.AtEndOfStream
> 	strLine = objStdOut.ReadLine
> 	If InStr(1,strLine,"=",1) Then  
> 		newstr = Left(strLine,Len(strLine)-1)
> 		newstr = Replace(newstr,"SerialNumber=","",1,-1,1)  
> 		revstr = StrReverse(newstr)
> 		lstr = LCase(revstr)
> 		WScript.Echo "Normal =" & newstr  
> 		WScript.Echo "Reverse =" & revstr  
> 		WScript.Echo "Revlow =" & lstr  
> 	End If
> Wend
> 
Grüße Uwe

Super,

Danke dir Uwe face-smile


Mit freundlichen Grüßen,

Invisan
colinardo
colinardo 15.01.2014 aktualisiert um 11:25:09 Uhr
Goto Top
Du kannst die Seriennummer aber auch einfacher direkt mit WMI auslesen:
strComputer = "."  
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS",,48)  

For Each objItem in colItems
	WScript.Echo "SerialNumber: " & objItem.SerialNumber  
Next
face-wink Uwe