Hallo Zusammen,
ich habe ein Script geschrieben um gewisse Daten aus einem Computer auszulesen. Hintergrund ist der, das wir gerne eine Art Audit über Reboots etc machen.
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: ****
Script Function:
Dieses Script scannt den aktuellen PC und speichert diese Infos in ein Textfile auf dem Server.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit];######################################
;Includes
;######################################
#include <_NTServices.au3>
#include <file.au3>
#include <Array.au3>
#include <_MultiDateToNorm.au3>
;######################################
;Variablen
;######################################
;Definition Pfade
Global $sauditpath
;Definition Infos
Global $sSophosUpdaterVersion, $sSophosVersion, $sFirewallstatus, $iAdminrights, $sAdminrights, $sScantime, $sScandate, $sAdmingroup, $i, $sUpdateDate, $sSystemBootTime,$sRebootDateSplit, $sRebootDate
Global $Name
Global $aSysteminfo = _GetSystemInfo()
Global $Members = _LocalGroupMembers("Administrators")
;Pfade
$sauditpath = "\\echreipcpc0177\Audit$" & @ComputerName
;Ini
$sInisave = $sauditpath & "\all.ini"
;Ist ein User angemeldet?
$loggegInUser = LoggedOnUser()
If $loggegInUser = 0 Then
Exit
EndIf
;Ablauf
_Adminrights ()
_LastUpdates ()
_ScannedOn ()
_SophosRead ()
_CheckService ()
_IniWrite ()
_Exit ()
;######################################
;DOS Programm
;######################################
Func _GetSystemInfo()
Local $iPid = Run(@ComSpec & ' /c systeminfo /FO CSV', @ScriptDir, @SW_HIDE, 2 + 4), $sOutput = "", $aData
Do
Sleep(20)
$sOutput &= StdoutRead($iPid, False, False)
Until @error
$aData = StringSplit($sOutput, @LF)
If $aData[0] <> 3 Then Return SetError(1)
$aName = StringRegExp($aData[1], '"([^"]*)"\,', 3)
$aValue = StringRegExp($aData[2], '"([^"]*)"\,', 3)
If UBound($aName) <> UBound($aValue) Then Return SetError(2)
Local $aReturn[UBound($aName)][2]
For $i = 0 To UBound($aName)-1
$aReturn[$i][0] = $aName[$i]
$aReturn[$i][1] = $aValue[$i]
Next
Return $aReturn
EndFunc ;==>_GetSystemInfo
;######################################
;Mitglieder der Administratorgruppe
;######################################
Func _LocalGroupMembers($sGroup)
;funkey 03.12.2009
Local $line, $aMembers
Local $cmd = "net localgroup "& $sGroup
Local $Pid = Run(@ComSpec & " /c " & $cmd, "", @SW_HIDE, 2)
While 1
$line &= StdoutRead($Pid)
If @error Then ExitLoop
Wend
$aMembers = StringSplit(StringTrimLeft($line, StringInStr($line, "-----", 0, -1) + 6), @CRLF, 3)
ReDim $aMembers[UBound($aMembers) - 3]
Return $aMembers
EndFunc
;######################################
;Überprüfen ob jemand angemeldet ist
;######################################
Func LoggedOnUser()
$PID = ProcessExists("explorer.exe") ; Will return the PID or 0 if the process isn't found.
If $PID Then
return 1
Else
return 0
EndIf
EndFunc
;######################################
;Benutzername und Adminrechte auslesen
;######################################
Func _Adminrights ()
$iAdminrights = IsAdmin()
If $iAdminrights = "1" Then
$sAdminrights = "ja"
Else
$sAdminrights = "nein"
EndIf
$WMI = ObjGet("WinMgmts:root/cimv2")
$colQuery1 = $WMI.ExecQuery("Select UserName FROM Win32_ComputerSystem")
For $item In $colQuery1
$ID = $item.UserName
Next
$colQuery2 = $WMI.ExecQuery("Select * FROM Win32_NetworkLoginProfile")
For $object In $colQuery2
If $object.Name = $ID Then
$Name = $object.Fullname
EndIf
Next
;Herausfiltern von Administrator
For $i = 0 To UBound($Members) -1
If $Members[$i] = "Administrator" Then
$Members[$i] = ""
ElseIf $Members[$i] = "Domain\Domain Admins" Then
$Members[$i] = ""
EndIf
Next
For $i = Ubound($Members) - 1 To 0 Step -1
If $Members[$i] = "" Then
_ArrayDelete($Members, $i)
EndIf
Next
$sAdmingroup = _ArrayToString($Members, ", ")
EndFunc
;######################################
;Last Update
;######################################
Func _LastUpdates ()
$sUpdateDate = RegRead("HKLM64\SOFTWARE\MATRIX42\**********Client\15.1\Setup", "Date")
EndFunc
;######################################
;Scanned on
;######################################
Func _ScannedOn ()
$sScandate = @MDAY & "." & @MON & "." & @YEAR
$sScantime = @HOUR & ":" & @MIN
EndFunc
;######################################
;Sophos auslesen
;######################################
Func _SophosRead ()
$sSophosUpdaterVersion = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{15C418EB-7675-42be-B2B3-281952DA014D}", "DisplayVersion")
If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{4320988A-7DE0-478D-A38B-CE9509BCE320}", "DisplayVersion") = "" Then
$sSophosVersion = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{9ACB414D-9347-40B6-A453-5EFB2DB59DFA}", "DisplayVersion")
Else
$sSophosVersion = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{4320988A-7DE0-478D-A38B-CE9509BCE320}", "DisplayVersion")
EndIf
EndFunc
;######################################
;Services überprüfen
;######################################
Func _CheckService ()
$sFirewallstatus = _ServiceStatus("MpsSvc")
EndFunc
;######################################
;Ini schreiben
;######################################
Func _IniWrite ()
;Ordner erstellen
If DirCreate($sauditpath) = 0 Then
Exit
EndIf
If IniWrite($sInisave, "Netzwerktest", "Netzwerktest", "erreichbar") = 0 Then
$sInisave = @TempDir & "Audit.ini"
EndIf
For $i = 0 To 30
IniWrite($sInisave, "Systeminfo", $aSysteminfo[$i][0], $aSysteminfo[$i][1])
Next
IniWrite($sInisave, "User", "Adminrights", $sAdminrights)
IniWrite($sInisave, "User", "User-ID", @UserName)
IniWrite($sInisave, "User", "Displayname", $Name)
IniWrite($sInisave, "User", "Admingroup", $sAdmingroup)
IniWrite($sInisave, "Systeminfo", "Last Update", $sUpdateDate)
IniWrite($sInisave, "Systeminfo", "Scanned Date", $sScandate)
IniWrite($sInisave, "Systeminfo", "Scanned Time", $sScantime)
IniWrite($sInisave, "Sophos", "SophosVersion", $sSophosVersion)
IniWrite($sInisave, "Sophos", "SophosUpdaterVersion", $sSophosUpdaterVersion)
IniWrite($sInisave, "Service", "firewall", $sFirewallstatus)
$sSystemBootTime = IniRead($sInisave, "Systeminfo", "System Boot Time", "0")
$sRebootDateSplit = StringSplit($sSystemBootTime, ",")
$sRebootDate = _MultiDateToNorm($sRebootDateSplit[1])
IniWrite($sInisave, "Systeminfo", "System Boot Time", $sRebootDate)
EndFunc
;######################################
;Exit
;######################################
Func _Exit ()
Exit
EndFunc
Mein Problem ist das ich von ca. 160 gescannten PC's Stk eine Fehlermeldung bekommen.
"Line 2165 (File XYZ)
Error: Variable used without beeing declared.
Ich würde diesen Fehler gerne abfangen/unterdrücken und ggf. lokal dokumentieren. Mit dieser Meldung kann ich nämlich nichts anfangen. Wäre echt cool wenn mir jemand helfen könnte.