Usuário com melhor resposta
Indentificar SO e Rodar outra função.

Pergunta
-
Boa noite pessoal.
Gostaria de uma ajuda, como faço para montar um scritp que indentifique qual sistema operacional esta instalado na estaçao que o mesmo for executado e assim que ele descobrir o so, rode uma funçao de leitura de uma chave determinada no registro, e existindo a chave ele grave isso em um log em um txt, e se nao tiver a chave ele crie a chave.
valeu pela força
Respostas
-
Olá,
Dá uma olhada no script abaixo, veja se é isso que você precisa:
Option Explicit
Dim objWMI, objItem, colItems,strValue1
Dim strComputer, VerOS, VerBig, OSystem,objshell,oRegstrComputer = "."
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
VerBig = Left(objItem.Version,3)
NextSelect Case VerBig
Case "6.0"
OSystem = "Vista"
checaReg oSystem
Case "5.0"
OSystem = "W2K"
Case "5.1"
OSystem = "XP"
Case "5.2"
OSystem = "Windows 2003"
Case "4.0"
OSystem = "NT 4.0"
Case Else
OSystem = "Unknown (Win9x perhaps?)"
End SelectWScript.Quit
Function ChecaReg(oSystem)
wscript.echo "OK"
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End IfEnd Function
Onde está chamando a função checaReg oSystem você pode colocar a função para cada Case que você quiser...
Pode ainda.. usar uma função para cada case, se for o caso.
Faça os testes e nos retorne.
Até mais,
Jesiel
Obs.: Se útil, classifique- Marcado como Resposta Marcelo TI sábado, 2 de maio de 2009 17:10
Todas as Respostas
-
Oi Marcelo,
vc pode fazer isso usando WMI no seu script vbs:
Eu encontrei esse aui, mas confesso que não cheguei a testar. Poste aí o resultado...
Option Explicit
Dim objWMI, objItem, colItems
Dim strComputer, VerOS, VerBig, OSystem
strComputer = "COMPUTERNAMEHERE"
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
VerBig = Left(objItem.Version,3)
Next
Select Case VerBig
Case "5.0" OSystem = "W2K"
Case "5.1" OSystem = "XP"
Case "5.2" OSystem = "Windows 2003"
Case "4.0" OSystem = "NT 4.0"
Case Else OSystem = "Unknown (Win9x perhaps?)"
End Select
Wscript.Echo "Version No : " & VerBig & vbCr _
& "OS System : " & OSystem
WScript.Quit
Abraços,
Marcelo.
Obs.: Se foi últil/respondeu, classifique
Marcelo Braga -- Um discipulo de Jesus -- MCT/ MCSA/ MCITP/ MCTS Exchange 2007. http://WindowsServer-AD.blogspot.com -
fala Marcelo.
meu chara valeu pelo wmi esse eu tb achei em uma pesquiza aqui no forum antes de postar, mais o problema é como fazer rodar outra funçao tipo a leitura de uma chave de registro, e se caso nao existir a chave criar a chave ai esta o problema, sabe como fazer ???? -
Marcelo,
Vc pode adicionar o seguinte trecho de código (exemplo):
Const HKEY_CURRENT_USER = &H80000001
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Run"
strValueName = "NomeDaChave"
dwValue = "ValorDaChave"
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
Tente montar aí o script e poste aqui, aí a gente vai te ajudando até finalizar o "dito cujo". rsrsrs
Abraço,
Marcelo.
Marcelo Braga -- Um discipulo de Jesus -- MCT/ MCSA/ MCITP/ MCTS Exchange 2007. http://WindowsServer-AD.blogspot.com -
Ai que mora o x da questao como eu faço para que ele a cada versao de os rode isso.
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End If
ou ate mesmo para verificar se um determinado hotfix esteja instaldo, caso eu utilize somente esse que coloquei e rode manual em qualquer versao do windows menos 9X ele roda sem problema porem gostaria que um unico script verifica-se qual SO esta na maquina e achando o SO, ele roda-se esses comando por exemplo mais nao estou sabendo com colocar cada chamada para cada versao é so abrir um campo chamado Case "5.0" OSystem = "W2K" e abaixo dele colocar a orientaçao descrita acima ????
Valeu pela força -
Olá,
Dá uma olhada no script abaixo, veja se é isso que você precisa:
Option Explicit
Dim objWMI, objItem, colItems,strValue1
Dim strComputer, VerOS, VerBig, OSystem,objshell,oRegstrComputer = "."
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
VerBig = Left(objItem.Version,3)
NextSelect Case VerBig
Case "6.0"
OSystem = "Vista"
checaReg oSystem
Case "5.0"
OSystem = "W2K"
Case "5.1"
OSystem = "XP"
Case "5.2"
OSystem = "Windows 2003"
Case "4.0"
OSystem = "NT 4.0"
Case Else
OSystem = "Unknown (Win9x perhaps?)"
End SelectWScript.Quit
Function ChecaReg(oSystem)
wscript.echo "OK"
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End IfEnd Function
Onde está chamando a função checaReg oSystem você pode colocar a função para cada Case que você quiser...
Pode ainda.. usar uma função para cada case, se for o caso.
Faça os testes e nos retorne.
Até mais,
Jesiel
Obs.: Se útil, classifique- Marcado como Resposta Marcelo TI sábado, 2 de maio de 2009 17:10
-
Jesiel
Boa noite
primeiro valeu pela força..
vamos la como vc colocou..
Option Explicit
Dim objWMI, objItem, colItems,strValue1
Dim strComputer, VerOS, VerBig, OSystem,objshell,oRegstrComputer = "."
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
VerBig = Left(objItem.Version,3)
NextSelect Case VerBig
Case "6.0"
OSystem = "Vista"
checaReg oSystem
Case "5.0"
OSystem = "W2K"
Case "5.1"
OSystem = "XP"
Case "5.2"
OSystem = "Windows 2003"
Case "4.0"
OSystem = "NT 4.0"
Case Else
OSystem = "Unknown (Win9x perhaps?)"
End SelectWScript.Quit
Function ChecaReg(oSystem)
wscript.echo "OK"
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End IfEnd Function
como faço para criar essa funçao case que vc colocou, vc poderia me ajudar tipo assim acima coloca os case '5.1' eu teria que abrir varias chamadas assim :
Case "5.1"
Function ChecaReg(oSystem)
wscript.echo "OK"
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End If
Case "6.0"
Function ChecaReg(oSystem)
wscript.echo "OK"
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End If
Seria assim ????
Obrigado mais uma vez. -
Olá,
Eu criei a função ChecaReg para facilitar, Ficaria assim:
Option Explicit
Dim objWMI, objItem, colItems,strValue1
Dim strComputer, VerOS, VerBig, OSystem,objshell,oReg
strComputer = "."
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
VerBig = Left(objItem.Version,3)
Next
Select Case VerBig
Case "6.0"
OSystem = "Vista"
checaReg oSystem
Case "5.0"
OSystem = "W2K"
checaReg oSystem
Case "5.1"
OSystem = "XP"
checaReg oSystem
Case "5.2"
OSystem = "Windows 2003
checaReg oSystem
Case "4.0"
OSystem = "NT 4.0"
checaReg oSystem
Case Else
OSystem = "Unknown (Win9x perhaps?)"
checaReg oSystem
End Select
WScript.Quit
Function ChecaReg(oSystem)
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End If
End Function -
Bom dia Jesiel
Mais uma vez valeu.
Mais assim eu terei que criar varias sessoes com esse ChecaReg, pois por exemplo no Windows 2000 o local aonde fica a chave que quero verificar é dirente do local que fica no Windows XP que por sua vez tb é diferente do local do 2003 e do vista...
-
Olá,
Então marcelo, por isso na função checareg eu estou usando a variavel oSystem como parametro.
Assim você só altera essa função. Exemplo:
Function ChecaReg(oSystem)
Const HKLM = &H80000002
set objshell = createobject("wscript.shell")
strComputer = "."
Set oReg=GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
if oSystem = "Vista" Then
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
Elseif oSystem = "W2k" Then
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
Elseif oSystem = "XP" Then
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
Else
oReg.GetStringValue HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","Empresa",strValue1
End if
If IsNull(strValue1) Then
objshell.run "\\servidor\compartilhamento\arquivo.bat"
End If
End Function
Faça os testes e nos retorne.
Até mais,
Jesiel
Obs.: Se útil, classifique -
Jesiel.
Cara valeu mesmo pela força vc ta me ajudando muito..
estou fazendo os teste, ele reclamou de uns end if e umas " que tavam valtando e agora estou no seguinte ponto, linha 44, carct 2 erro: variável não definida 'strValue2' codigo 800A01F4, o que posso fazer pois como comentei antes quando rodo sozinho aquele que eu mandei que verifica o registro e se nao tiver roda a bat, roda sem problemas o que eu teria que colocar a mais para ele comprender essa outra chamada ou função..
valeu obrigado. -
-
Olá,
Marcelo, o erro da Variavel strValue2, para resolver, basta você declarar ela no inicio do Programa (onde está dim strvalue1 -> coloque virgula e adicione strvalue2.
Você pode postar o programa inteiro com as linhas do registro??? Fica mais fácil para irmos acertando os detalhes.
Até mais,
Jesiel
Obs.: Se útil, classifique -