Scripts admin úteis do WMI

5

Em um comentário à minha resposta a essa questão , o cop1152 disse que adorava scripts de WMI. Bem, eu também!

Quais são os seus scripts favoritos, melhores e mais úteis que você gostaria de compartilhar com a comunidade?

obrigado.

    
por gbjbaanb 13.04.2017 / 14:14

6 respostas

3

Eu encurtei um monte de snippets WMIC aqui .

    
por 12.06.2009 / 02:49
5

Um que escrevi para ajudar um colega, que executou o RDPd em um servidor, abriu o Visualizador de Eventos, examinou-o em busca de erros. Então repetido para os outros 3 servidores ... todos os dias.

'
' WMI script to read all eventlog errors generated since last time this script was run.
' This script reads a datetime value from a file (EventView_date.txt) and uses it to
' construct a WMI query for all windows EventLog entries since then that are of type
' Error or error (seems winxp writes with a lowercase e)
'
' These results are written to a file (EventView_<dts>.log) and the time the script was
' run is written to the date file. This allows this script to be run several times a day
' and will only retrieve the error entries since the last run.
'
' If the date file is not present a new one will be created with the current date/time.
'
'
' Usage: click the vbs file in Windows Explorer to run using wscript. Some information
'        will be displayed in message boxes (start time, each computer, number of records found)
'        Alternatively type "cscript EventLogErrorView.vbs" in a command prompt to show the
'        same details written to the command prompt. This can be used in a batch file, or in
'        a scheduled task - the command is cscript, the parameter is this vbs file.
'
'
' 

On Error Resume Next

'
' update this to refelect the computers to monitor - comma separated for multiple
'
arrComputers = Array("server1", "server2")



Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

Set objFSO = CreateObject("Scripting.FileSystemObject")

today = ""
Set objDateFile = objFSO.OpenTextFile ("EventView_date.txt")
    today = objDateFile.Readline
    Wscript.echo "today = " & today
    if (isempty(today)) then
        WScript.Echo "Date file not found, using today's date at midnight"
        today = Date & " 00:00:00"
    end if

    today = DateToWMIDateString(today)

' write current datetime to file for next run.
set objDateFile = objFSO.CreateTextFile("EventView_date.txt")
objDateFile.WriteLine(Date & " " & Time)

Set objFile = objFSO.CreateTextFile("EventView_" & today & ".log")



' start processing
WScript.Echo "Processing All Error reports since: " & today & " (" & WMIDateStringToDate(today) & ")"
objFile.WriteLine "Processing All Error reports since: " & today & " (" & WMIDateStringToDate(today) & ")"


For Each strComputer In arrComputers
   objFile.WriteLine
   objFile.WriteLine
   objFile.WriteLine
   objFile.WriteLine "=========================================="
   objFile.WriteLine "Computer: " & strComputer
   objFile.WriteLine "=========================================="

   WScript.Echo "Computer: " & strComputer

' notes:
' timestamp comparisons in WMI queries are in the form YYYYMMDDHHMMSS.milliseconds+exp

   Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE (Type = 'error' OR Type= 'Error') AND TimeGenerated > '" & today & ".000000+000'", "WQL", _
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)

   dim records
   records = 0

   For Each objItem In colItems
        objFile.WriteLine "CategoryString: " & objItem.CategoryString
        objFile.WriteLine "ComputerName: " & objItem.ComputerName
        strData = Join(objItem.Data, ",")
            objFile.WriteLine "Data: " & strData
        objFile.WriteLine "EventCode: " & objItem.EventCode
        objFile.WriteLine "EventIdentifier: " & objItem.EventIdentifier
        objFile.WriteLine "EventType: " & objItem.EventType

        strInsertionStrings = Join(objItem.InsertionStrings, ",")
        objFile.WriteLine "InsertionStrings: " & strInsertionStrings
        objFile.WriteLine "Logfile: " & objItem.Logfile
        objFile.WriteLine "Message: " & objItem.Message

        objFile.WriteLine "SourceName: " & objItem.SourceName
        objFile.WriteLine "TimeGenerated: " & WMIDateStringToDate(objItem.TimeGenerated)

        objFile.WriteLine "Type: " & objItem.Type
        objFile.WriteLine "User: " & objItem.User
        objFile.WriteLine
        objFile.WriteLine "------------------------------------------"
        objFile.WriteLine

        records = records + 1
   Next

   WScript.Echo "          " & records & " records found"
   objFile.WriteLine "          " & records & " records found"
Next



Function WMIDateStringToDate(dtmDate)
    WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
    Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
    & " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
End Function

' takes a dd/mm/yyyy hh:mm:ss format and turns it into yyyymmddhhmmss
Function DateToWMIDateString(dtmDate)
DateToWMIDateString = Year(dtmDate) & PadZeros(Month(dtmDate)) & PadZeros(Day(dtmDate)) & PadZeros(Hour(dtmDate)) & PadZeros(Minute(dtmDate)) & PadZeros(Second(dtmDate))
End Function

Function PadZeros(dtmDate)
If Len(dtmDate) = 1 Then
    PadZeros = "0" & dtmDate
Else
    PadZeros = dtmDate
End If
End Function
    
por 16.03.2011 / 22:01
1

Tudo na ferramenta da Microsoft (gratuita) Scriptomatic2!

    
por 24.09.2011 / 02:57
0

Um dos meus favs (porque foi o meu primeiro) que me deu mais problemas ... que eu escrevi várias vezes até que funcionou corretamente .... foi um script que remotamente 'desativado' nossa web caseiro -filtro.

Usamos uma versão 'personalizada' (por mim) do Squid com algumas listas negras disponíveis gratuitamente para filtro de conteúdo e portas de bloco em nossas máquinas públicas (eu trabalho para um sistema de bibliotecas públicas de porte médio e 3 filiais). p>

O script WMI é executado em uma máquina da equipe. Quando um membro da equipe o executa, ele é solicitado a selecionar qual máquina desabilitar o filtro. Quando o script é executado, essencialmente, ele remove a marca de seleção das opões de configuração de proxy no Internet Explorer, no nível do registro.

O filtro é ativado por um arquivo em lote que é disparado quando a sessão de usuários é ativada e o computador é automaticamente desconectado e ativado novamente.

Acabamos usando meu WMI apenas em algumas máquinas de teste, mas gostei muito de aprender como quase tudo pode ser feito com o WMI.

    
por 04.06.2009 / 01:01
-1

O script é útil e eu sou capaz de executar isso. Mas o arquivo está mostrando apenas as informações como

========================================== Dados: InsertionStrings:

      1 records found

Mais sobre ("EventView_" & today & ".log") este arquivo está apenas criando o arquivo com EventView_00.log não com a data real. De acordo com a sintaxe deve dar dados em vez off) 00.

    
por 30.06.2009 / 07:53
-1

Do WSH JScript:

// List errors from Windows EventLog (filter only errors from last month).

function leadingzero(str) {
    if (str.length == 1)
        return "0"+str;
    else
        return str;
}
function good_date(d) {
    var dstr = d.getFullYear().toString();
    dstr += leadingzero((d.getMonth()+1).toString());
    dstr += leadingzero(d.getDate().toString());
    dstr += leadingzero(d.getHours().toString());
    dstr += leadingzero(d.getMinutes().toString());
    dstr += leadingzero(d.getSeconds().toString());
    dstr += ".000000-000";
    return dstr;
}

// 24*3600*1000 - one day
// 30*24*3600*1000 - one month
time = good_date(new Date(new Date() - 30*24*3600*1000));

var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;

var objWMIService = GetObject("winmgmts:\\.\root\CIMV2");
var items = objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE (Type = 'Ошибка' OR Type = 'Error') AND TimeGenerated > '" + time + "'",
        "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);
var enumItems = new Enumerator(items);

for (enumItems.moveFirst(); !enumItems.atEnd(); enumItems.moveNext()) {
    var i = enumItems.item();
    WScript.Echo("Type: " + i.Type + "\n" + "Message: " + i.Message + "\n" + "TimeGenerated: " + i.TimeGenerated);
} 
    
por 06.11.2011 / 14:52