Betriebssystemabfrage an Remoterechner Verfasst am: 25.08.2010, 07:56
Hi,
hab hier ein Script das das Betriebssystem an einem lokalen Rechner abfragt und mir eine Rückgabe liefert.
Jetzt möchte ich aber das Betriebssystem an nem Remoterechner abfragen von meinem PC aus. Könntet ihr mir helfen was ich da ändern muss?
msgbox GetOSVersion()
Function GetOSVersion()
strComputer = "."
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem",,4
For Each objItem in colItems
'tmp1 = "Caption: " & objItem.Caption
if InStr(1, LCase(objItem.Caption), "windows 2000", 1) > 0 then
OS = "W2K"
elseif InStr(1, LCase(objItem.Caption), "windows XP", 1) > 0 then
OS = "WXP"
elseif InStr(1, LCase(objItem.Caption), "windows 7", 1) > 0 then
OS = "W7"
elseif InStr(1, LCase(objItem.Caption), "server 2003", 1) > 0 then
OS = "W2003"
elseif InStr(1, LCase(objItem.Caption), "server 2008", 1) > 0 then
OS = "W2008"
else
OS = "UnknownOS"
end if
Next
Set objWMI = Nothing
Set colItems = Nothing
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
'tmp2 = "PROCESSOR_ARCHITECTURE: " & WshSysEnv("PROCESSOR_ARCHITECTURE")
Select Case LCase(WshSysEnv("PROCESSOR_ARCHITECTURE"))
Case "x86"
OS = OS & "-32"
Case "amd64"
OS = OS & "-64"
End Select
Set WshShell = Nothing
Set WshSysEnv = Nothing
'Wscript.Echo tmp1 & vbcrlf & tmp2 & vbcrlf & vbcrlf & "System: " & OS
GetOSVersion = OS
End Function _________________
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 25.08.2010, 09:54
hi
ich nehme an dass das problem folgendes ist
mit deiner forschleife gehst du alle items druch
und dabei wird in deine variable OS
das betriebssystem reingeschrieben
aber die forschleife spring weiter
Und schreibt erneut einen string hinein
probiere mal
if InStr(1, LCase(objItem.Caption), "windows 2000", 1) > 0 then
OS = "W2K"
exit for
elseif....
somit wird das betriebssystem in die variable geschrieben und springt dann zum ende der forschleife
vl funkts dann
lg
Zenolio Newbie
Anmeldedatum: 24.08.2010 Beiträge: 10
wegen Script Verfasst am: 25.08.2010, 09:59
das Script funktioniert lokal auf meinem rechner ganz wunderbar, aber ich würde gerne z.B. beim Rechner von meinem Tischnachbarn die Windows version abfragen lassen und zwar von meinem pc aus. hast du da vllt nen vorschlag?
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 25.08.2010, 10:06
oh aso
das heist du bist noch gar nicht verbunden...
hmm ja in vb.net weis ich nicht so ganz genau
aber winsock
mit dem server verbinden und dann halt mit befehle hinundher senden
Zenolio Newbie
Anmeldedatum: 24.08.2010 Beiträge: 10
wegen winsock Verfasst am: 25.08.2010, 10:12
wießt du ne möglichkeit wie ich das mit winsock ins script einbinden kann?
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 25.08.2010, 10:53
wie gesagt ich weis nichtmal obs winsock in .net jetz noch gibt
aber sonst
nicht schwer
am server
winsock1.localport = port
windock1.listen
am client
winsock1.remoteip = ip
winsock1.remoteport = port
winsock1.connect
ja und dann halt senddata
Zenolio Newbie
Anmeldedatum: 24.08.2010 Beiträge: 10
Script Verfasst am: 25.08.2010, 11:17
hm ok
fällt dir noch was anderes ein?
iregendwas wo ich nur mein script für brauche?
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 25.08.2010, 11:52
wie meinst du das?
nur dein script?
ja e nur dein script
aber bevor du auf einem anderen rechner was auslesen kannst und es bei dir anzeigen zu lassen
brauchst du eine server-exe auf dem pc deines nachbarn oder wo auch immer
und dann noch seine ip, einen offenen port
und dann musst nur mehr die verbindung herstellen zwischen server und client
Zenolio Newbie
Anmeldedatum: 24.08.2010 Beiträge: 10
Verfasst am: 25.08.2010, 12:05
also mein script umfasst zwie teile.
den teil wo ich das betriebssystem auslesen will und den teil wo ich dann auf dem anderen rechner in der aufgabenplanung einen task anlege.
der teil wo ich auf dem anderen rechner einen task anlege klappt schon. sogar auch wenn ich das script von meinem lokalen rechner ausführe und es auf einem anderen rechner als task angelegt wird. jetzt will ich aber auch das er zwischen den betriebssystem unterscheidet da der teil des scripts wo ich den task anlege unterschiedlich für winxp und win7 ist. deswegen muss ich das betriebssystem auf einem anderen rechner auslesen wenn ich das script von meinem lokalen rechner aus starte.
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 25.08.2010, 12:50
ja dann füg doch einfach unten an dein script sowas wie
Code:
select Case OS
case "WinXP":
Prozedur oder funktionsaufruf für task
case "win7":
die ander funktion
end select
kannst damit vl was anfangen?
Zenolio Newbie
Anmeldedatum: 24.08.2010 Beiträge: 10
Verfasst am: 25.08.2010, 12:56
ja kann damit schon was anfangen, aber mein problem besteht wahrscheinlich immer noch. Also das mit dem Betriebssystem an nem anderen rechner auslesen. Weist ich möchte oben bei strComputer = "." den auszulesenden rechner angeben und er soll mir dann sein betriebssystem zurückliefern, wenn er das gemacht hat soll das andere script anhand dieser information den passenden teil aus dem script raussuchen der den task anlegt.
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 25.08.2010, 13:58
ich kann dir nicht folgen
wie stellst du dir das vor?
was möchtest du in die Variable strComputer
genau eingeben?
nur kurz zum mit denken strComputer ist ein computer aus einem netzwerk oder ein xbeliebiger oder sowas
richtig?
Zenolio Newbie
Anmeldedatum: 24.08.2010 Beiträge: 10
Verfasst am: 25.08.2010, 14:05
richtig
warte ich zeige dir ma das komplette script. So stelle ich mir des vor. hat halt noch ein paar schönheitsfehler.
Dim WshShell, oExec
Dim CommandOutputText, lokalerSystemname
'*** Rückgabe vom System ***
If oExec.ExitCode = 0 Then
WScript.Echo "Der Task wurde erfolgreich erstellt!" & vbCrLF & "Rückgabe vom System: " & CommandOutputText
Else
WScript.Echo "Der Task konnte nicht erstellt werden!" & vbCrLF & "Rückgabe vom System: " & CommandOutputText
End If
'*** Funktion die die Ausgaben des ausgeführten Kommandos einliest ***
Function ReadCommandOutput(oExec)
If Not oExec.StdOut.AtEndOfStream Then
ReadCommandOutput = oExec.StdOut.ReadAll
Exit Function
End If
If Not oExec.StdErr.AtEndOfStream Then
ReadCommandOutput = oExec.StdErr.ReadAll
Exit Function
End If
'ReadCommandOutput = -1
End Function
'*** Get values of an INI-File ***
Function GetINIString(Section, KeyName, Default, IniFileName)
Dim INIContents, PosSection, PosEndSection, sContents, Value, Found
'Get contents of the INI file As a string
INIContents = GetFile(IniFileName)
'Find section
PosSection = InStr(1, INIContents, "[" & Section & "]", vbTextCompare)
If PosSection>0 Then
'Section exists. Find end of section
PosEndSection = InStr(PosSection, INIContents, vbCrLf & "[")
'?Is this last section?
If PosEndSection = 0 Then PosEndSection = Len(INIContents)+1
'Separate section contents
sContents = Mid(INIContents, PosSection, PosEndSection - PosSection)
If InStr(1, sContents, vbCrLf & KeyName & "=", vbTextCompare)>0 Then
Found = True
'Separate value of a key.
Value = SeparateField(sContents, vbCrLf & KeyName & "=", vbCrLf)
End If
End If
If isempty(Found) Then Value = Default
GetINIString = trim(Value)
End Function
'*** Betriebssystem auslesen ***
'msgbox GetOSVersion()
Function GetOSVersion()
strComputer = "Systemname"
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem",,4
For Each objItem in colItems
'tmp1 = "Caption: " & objItem.Caption
if InStr(1, LCase(objItem.Caption), "windows 2000", 1) > 0 then
OS = "W2K"
elseif InStr(1, LCase(objItem.Caption), "windows XP", 1) > 0 then
OS = "WXP"
elseif InStr(1, LCase(objItem.Caption), "windows 7", 1) > 0 then
OS = "W7"
elseif InStr(1, LCase(objItem.Caption), "server 2003", 1) > 0 then
OS = "W2003"
elseif InStr(1, LCase(objItem.Caption), "server 2008", 1) > 0 then
OS = "W2008"
else
OS = "UnknownOS"
end if
Next
Set objWMI = Nothing
Set colItems = Nothing
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
'tmp2 = "PROCESSOR_ARCHITECTURE: " & WshSysEnv("PROCESSOR_ARCHITECTURE")
Select Case LCase(WshSysEnv("PROCESSOR_ARCHITECTURE"))
Case "x86"
OS = OS & "-32"
Case "amd64"
OS = OS & "-64"
End Select
Set WshShell = Nothing
Set WshSysEnv = Nothing
'Wscript.Echo tmp1 & vbcrlf & tmp2 & vbcrlf & vbcrlf & "System: " & OS
GetOSVersion = OS
End Function
christopher.g Überflieger
Anmeldedatum: 03.05.2008 Beiträge: 536
Verfasst am: 25.08.2010, 17:59
gut ok jetzt hab ichs begriffen...
aber ich glaube du verstehst da etwas falsch...
du kannst nicht einen code den du bei dir am pc hast ausführen und
dabei von einem anderen pc irgendwelche daten auslesen...
dafür brauchst du 2 programme
eines bei dir auf dem pc (dass die befehle schickt)
und eines am anderen pc (das mit dem script dann das os ausliest)