none
Indentificar SO e Rodar outra função. RRS feed

  • 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
    domingo, 26 de abril de 2009 02:52

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,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"
    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.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 If

    End 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
    segunda-feira, 27 de abril de 2009 23:33

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
    domingo, 26 de abril de 2009 04:10
  • 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 ????
    domingo, 26 de abril de 2009 21:49
  • 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
    segunda-feira, 27 de abril de 2009 03:45
  • 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

    segunda-feira, 27 de abril de 2009 21:28
  • 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,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"
    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.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 If

    End 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
    segunda-feira, 27 de abril de 2009 23:33
  • 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,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"
    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.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 If

    End 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.

    terça-feira, 28 de abril de 2009 21:09
  • 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
    quarta-feira, 29 de abril de 2009 11:31
  • 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...

    quarta-feira, 29 de abril de 2009 13:26
  • 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
    quarta-feira, 29 de abril de 2009 14:00
  • 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.
    quarta-feira, 29 de abril de 2009 16:47
  • Jesiel.

    Alguma ideia.?
    quarta-feira, 29 de abril de 2009 23:20
  • 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
    quinta-feira, 30 de abril de 2009 20:29
  • Jesiel

    Otimo tudo funcionou so mais uma pergunta, é possivel colocar strValue* por exemplo pois sera varias linhas...

    Obrigado.

    Ja ja fecho o post vc de uma grande força obridado mesmo.,
    sexta-feira, 1 de maio de 2009 14:13