Break on
$ = SetOption('wrapateol','on')
$ = SetConsole("hide")
$ = RedirectOutput('c:\logfiles\SQLInv.log', 1)
$InvVer = '2012/05/09 - Production Server'
?
? $InvVer
? @DATE + ' '+ @TIME
$start = @ticks
$Make =Trim(Split(WMIQuery("Manufacturer","Win32_ComputerSystem"))[0])
$Model =Trim(WMIQuery("Model","Win32_ComputerSystem"))
$SerNo =WMIQuery("SerialNumber","Win32_BIOS")
If Len($SerNo) < 2
$SerNo=WMIQuery("SerialNumber","Win32_SystemEnclosure")
If InStr($serno,"|")
For Each $Return in Split($serno,"|")
If Len($Return)<10 $serno=$Return EndIf
Next
EndIf
EndIf
$SerNo =Trim(UCase($SerNo))
If $serNo < '1' Quit EndIf
$asset =WMIQuery("SMBIOSAssetTag","Win32_SystemEnclosure")
If InStr($asset,"|")
For Each $return in Split($asset,"|")
If $return $asset=$return EndIf
Next
EndIf
$asset = Join(Split($asset,"|"),'')
$asset = Trim(UCase($asset))
$objWMIService = GetObject("winmgmts:\\.\root\cimv2")
if $objWMIService and not @error
$colOperatingSystems = $objWMIService.ExecQuery("Select * From Win32_PerfFormattedData_PerfOS_System")
if $colOperatingSystems and not @error
For Each $objOS in $colOperatingSystems
$uptime = val($objOS.SystemUpTime) / 60 /60
Next
endif
endif
$CPUsp =WMIQuery("CurrentClockSpeed","Win32_Processor")
Select
Case Left($CPUsp,3) = "339" $CPUsp=3400
Case Left($CPUsp,3) = "319" $CPUsp=3200
Case Left($CPUsp,3) = "299" $CPUsp=3000
Case Left($CPUsp,3) = "279" $CPUsp=2800
Case Left($CPUsp,3) = "269" $CPUsp=2600
Case Left($CPUsp,3) = "239" $CPUsp=2400
Case Left($CPUsp,3) = "229" $CPUsp=2200
Case Left($CPUsp,3) = "220" $CPUsp=2200
Case Left($CPUsp,3) = "199" $CPUsp=2000
Case Left($CPUsp,3) = "186" $CPUsp=1860
Case Left($CPUsp,3) = "182" $CPUsp=1830
Case Left($CPUsp,3) = "179" $CPUsp=1800
Case Left($CPUsp,3) = "169" $CPUsp=1700
Case Left($CPUsp,3) = "159" $CPUsp=1600
Case Left($CPUsp,3) = "139" $CPUsp=1400
Case Left($CPUsp,3) = "106" $CPUsp=1100
Case Left($CPUsp,2) = "99" $CPUsp=1000
Case Left($CPUsp,2) = "90" $CPUsp=900
Case Left($CPUsp,2) = "85" $CPUsp=850
Case Left($CPUsp,2) = "70" $CPUsp=700
Case Left($CPUsp,2) = "66" $CPUsp=667
Case Left($CPUsp,2) = "59" $CPUsp=600
Case Left($CPUsp,2) = "49" $CPUsp=500
Case Left($CPUsp,2) = "39" $CPUsp=400
EndSelect
$dimms =Split(WMIQuery("Capacity","Win32_PhysicalMemory"),"|")
For $a=0 to UBound($dimms)
$=Execute("$$dimm$a=val($$dimms[$a]) / 1048576")
$=Execute("$$memory=val($$Memory)+val($$dimm$a)")
Next
$nic=0
Do
$ip = EnumIPInfo($nic,0)
$snm = EnumIPInfo($nic,1)
$NicDesc= EnumIPInfo($nic,2)
$mygw = EnumIPInfo($nic,3)
$nic=Val($nic)+1
Until InStr($ip,'192.168.') Or InStr($ip,'192.168.24') Or InStr($ip,'192.168.201.') Or Val($nic) > 10
$network = Left($ip,InStrRev($ip,'.'))
$Mac =WMIQuery("MACAddress","Win32_NetworkAdapterConfiguration",,"Description",$NicDesc)
$Mac =Join(Split($mac,':'),'')
$Mac =Join(Split($mac,'|'),'')
If FindProc(@wksta,'MSASCui.exe')
If KeyExists('HKLM\SOFTWARE\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Signature Updates')
$AVProgram = 'Microsoft Forefront Client'
$AVEngine = ReadValue('HKLM\SOFTWARE\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Signature Updates','EngineVersion')
$AVSignature = ReadValue('HKLM\SOFTWARE\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Signature Updates','AVSignatureVersion')
EndIf
EndIf
$MSOdir =ReadValue("HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\excel.exe","Path")
$excel =GetFileVersion("$MSOdir\excel.exe")
$MSOVer =Split($excel,'.')[0]
$MSOSPVer = ''
$assigned = ReadValue("HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters","srvcomment")
If Left($assigned,2) = '68'
$assigned = Left(Right(Join(Split(Join(Split($assigned,' '),''),'-'),''),-2),9)
EndIf
$ini = 0
$cnstring = "DRIVER={SQL Server};SERVER=SQLServer;UID=Inventory;PWD=password;DATABASE=InvDB"
$cn = CreateObject("ADODB.Connection")
$cmd= CreateObject("ADODB.Command")
$rs = CreateObject("ADODB.RecordSet")
$cn.connectionstring = $cnstring
$cn.open
$cmd.activeconnection = $cn
$rs.cursortype = 3
$rs.locktype = 3
$rs.activecommand = $cmd
$cmdtxt = "select * from dbo._tbl_Main where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
If $rs.eof = -1 $rs.addnew EndIf
$rs.fields.item("SerialNumber").value = $serNo
$rs.fields.item("ComputerName").value = @wksta
$rs.fields.item("AssignedTo").value = $assigned
$rs.fields.item("NetworkID").value = $network
$rs.fields.item("IPAddress").value = $ip
$rs.fields.item("InvDate").value = @date
$rs.fields.item("Version").value = $InvVer
$rs.fields.item("MacAddr").value = $Mac
$rs.fields.item("Uptime").value = $uptime
$rs.update ;? 'Error = '+@ERROR+' - '+@SERROR
;if not @error
$nul = WriteValue('HKLM\SOFTWARE\Information Technology\SQLInventory','LastRun',@date,REG_SZ)
;endif
$rs.close
$cmdtxt = "select * from dbo._tbl_OSEnv where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
If $rs.eof = -1 $rs.addnew EndIf
$rs.fields.item("SerialNumber").value = $serNo
$rs.fields.item("OS").value = @ProductType
$rs.fields.item("OSCSD").value = @csd
$rs.fields.item("64bit").value = @OnWoW64
$rs.fields.item("AVProgram").value = $AVProgram
$rs.fields.item("AVEngine").value = $AVEngine
$rs.fields.item("AVSignature").value = $AVSignature
$rs.fields.item("MSO").value = $MSOVer
$rs.fields.item("MSOSP").value = $MSOSPVer
$rs.update ? 'Error = '+@ERROR+' - '+@SERROR
$rs.close
$cmdtxt = "select * from dbo._tbl_OrgCodes where OrgCode = '$Asset'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
$code = IIf($rs.eof = -1,1,0)
$rs.close ;? 'Error = '+@ERROR+' - '+@SERROR
$cmdtxt = "select * from dbo._tbl_Computers where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
If $rs.eof = -1
$rs.addnew
$rs.fields.item("SerialNumber").value = $serNo
If $code = 1
$rs.fields.item("Tag").value= $asset
Else
$rs.fields.item("OrgCode").value= $asset
EndIf
$rs.fields.item("Make").value = $Make
$rs.fields.item("Model").value = $Model
$rs.fields.item("CPU").value = $CPUsp
$rs.fields.item("FirstInventory").value = @date
$rs.update ;? 'Error = '+@ERROR+' - '+@SERROR
;if not @error
$nul = WriteValue('HKLM\SOFTWARE\Information Technology\SQLInventory','FirstRun',@date,REG_SZ)
;endif
Else
If Val($rs.fields.item("Memory").value) <> $memory
$rs.fields.item("Memory").value = Abs(CDbl(Val($memory)))
$rs.update ;? 'Error = '+@ERROR+' - '+@SERROR
EndIf
If $rs.fields.item("Tag").value < '0' And $code = 1
$rs.fields.item("Tag").value= $asset
$rs.update ;? 'Error = '+@ERROR+' - '+@SERROR
EndIf
If $rs.fields.item("OrgCode").value < '0' And $code = 0
$rs.fields.item("OrgCode").value= $asset
$rs.update ;? 'Error = '+@ERROR+' - '+@SERROR
EndIf
If $rs.fields.item("FirstInventory").value < '0'
$rs.fields.item("FirstInventory").value = @date
$rs.update ;? 'Error = '+@ERROR+' - '+@SERROR
EndIf
EndIf
$rs.close
; *********************** Monitor Inventory ***************************************
$cmdtxt = "Delete from dbo._tbl_Monitors where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt ? $cmdtxt
$rs.Open($cmd) ? 'Mon Del-Open: Error = ' + @ERROR + ' - ' + @SERROR
$rs.close ? 'Mon Del-Close: Error = ' + @ERROR + ' - ' + @SERROR
$cmdtxt = "select * from dbo._tbl_Monitors where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
$wmiColl = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * FROM Win32_DesktopMonitor Where ScreenWidth>'0'")
For Each $wmiObj in $wmiColl
$pnpid = $wmiObj.PNPDeviceID
If $pnpid > 'a'
If InStr($pnpid,'\')
$monModel = Split($pnpid,'\')[1]
Else
$monModel = 'Unknown'
EndIf
$res = CStr($wmiObj.ScreenWidth) + "x" + CStr($wmiObj.ScreenHeight)
$rs.addnew
$rs.fields.item("SerialNumber").value = $Serno
$rs.fields.item("MonitorModel").value = $MonModel
$rs.fields.item("Resolution").value = $res
$rs.fields.item("InvDate").value = @date
$rs.update ? 'Mon Add-Update: Error = ' + @ERROR + ' - ' + @SERROR
EndIf
Next
$rs.close ? 'Mon Add-Close: Error = ' + @ERROR + ' - ' + @SERROR
$wmiColl=''
; *********************** Memory Inventory ***************************************
; ******** http://msdn.microsoft.com/en-us/library/aa394347(VS.85).aspx ********
$cmdtxt = "Delete from dbo._tbl_Memory where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt ? $cmdtxt
$rs.Open($cmd) ? 'Mem Del-Open: Error = '+@ERROR+' - '+@SERROR
$rs.close ? 'Mem Del-Close: Error = '+@ERROR+' - '+@SERROR
$cmdtxt = "select * from dbo._tbl_Memory where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt ? $cmdtxt
$rs.open ($cmd) ? 'Mem Add-Open: Error = '+@ERROR+' - '+@SERROR
$wmiColl = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * FROM Win32_PhysicalMemory")
For Each $wmiObj in $wmiColl
$rs.addnew
$rs.fields.item("SerialNumber").value = $Serno
$rs.fields.item("DeviceLocator").value = $wmiObj.DeviceLocator
$rs.fields.item("Capacity").value = Abs(CDbl(Val($wmiObj.Capacity))/1024/1024)
$rs.fields.item("Speed").value = $wmiObj.Speed
$rs.fields.item("FormFactor").value = $wmiObj.FormFactor
$rs.fields.item("MemoryType").value = $wmiObj.MemoryType
$rs.fields.item("InvDate").value = @date
$rs.update ? 'Mem Add-Update: Error = ' + @ERROR + ' - ' + @SERROR
Next
$rs.close ? 'Mem Add-Close: Error = '+@ERROR+' - '+@SERROR
$wmiColl=''
; *********************** Disk Drive Inventory ***************************************
; ******** http://msdn.microsoft.com/en-us/library/aa394347(VS.85).aspx ********
$cmdtxt = "Delete from dbo._tbl_DiskDrive where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt ? $cmdtxt
$rs.Open($cmd) ? 'Disk Del-Open: Error = '+@ERROR+' - '+@SERROR
$rs.close ? 'Disk Del-Close: Error = '+@ERROR+' - '+@SERROR
$cmdtxt = "select * from dbo._tbl_DiskDrive where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt ? $cmdtxt
$rs.open ($cmd) ? 'Disk Add-Open: Error = ' + @ERROR + ' - ' + @SERROR
$wmiColl = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * FROM Win32_DiskDrive where MediaLoaded='-1'")
For Each $wmiObj in $wmiColl
$rs.addnew
$rs.fields.item("SerialNumber").value = $Serno
$rs.fields.item("DriveSize").value = Round(CDbl($wmiObj.Size)/1000/1000/1000)
$rs.fields.item("InterfaceType").value = $wmiObj.InterfaceType
$rs.fields.item("Model").value = $wmiObj.Model
$rs.fields.item("Status").value = $wmiObj.Status
$rs.fields.item("InvDate").value = @date
$rs.update ? 'Disk Add-Update: Error = ' + @ERROR + ' - ' + @SERROR
Next
$rs.close ? 'Disk Add-Close: Error = ' + @ERROR + ' - ' + @SERROR
; *********************** Software Inventory ***************************************
$cmdtxt = "Delete from dbo._tbl_Software where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt
$rs.Open($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
$rs.close ;? 'Error = '+@ERROR+' - '+@SERROR
$cmdtxt = "select * from dbo._tbl_Software where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
$Index = 0 $err = 0 $key = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
Do
$SubKey = EnumKey($Key, $Index)
If @ERROR = 0
If Not Left($subkey,'2') = 'KB'
$DisplayName = ReadValue($key+$subKey,'DisplayName')
$DisplayVersion = ReadValue($key+$subKey,'DisplayVersion')
$InstallDate = ReadValue($key+$subKey,'InstallDate')
$InstallLocation= ReadValue($key+$subKey,'InstallLocation')
$Publisher = ReadValue($key+$subKey,'Publisher')
If Not $DisplayName + $DisplayVersion + $InstallDate + $InstallLocation + $Publisher < 'a'
$rs.addnew
$rs.fields.item("SerialNumber").value = $Serno
$rs.fields.item("RegKeyName").value = $SubKey
$rs.fields.item("DisplayName").value = $DisplayName
$rs.fields.item("DisplayVersion").value = $DisplayVersion
$rs.fields.item("InstallDate").value = $InstallDate
$rs.fields.item("InstallLocation").value = $InstallLocation
$rs.fields.item("Publisher").value = $Publisher
$rs.fields.item("InvDate").value = @date
$rs.update
EndIf
EndIf
$Index = $Index + 1
Else
$err = 1
EndIf
Until $err
$rs.close
; *********************** MSO Sessions Inventory ***************************************
$cmdtxt = "Delete from dbo._tbl_MSOSessions where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt
$rs.Open($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
$rs.close ;? 'Error = '+@ERROR+' - '+@SERROR
$cmdtxt = "select * from dbo._tbl_MSOSessions where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open($cmd) ;? 'Error = '+@ERROR+' - '+@SERROR
$getobj = GetObject("winmgmts:{impersonationLevel=impersonate}!//.")
$backup = $getobj.ExecQuery("Select * From Win32_NTLogEvent Where Logfile='osession' and eventcode='7000'") ;and message like 'id: 2%'
For Each $event in $backup
$ec = $event.EventIdentifier
$time = $event.TimeGenerated
$year = SubStr($time, 1, 4) $Hour = SubStr($time, 9, 2)
$month = SubStr($time, 5, 2) $min = SubStr($time, 11, 2)
$day = SubStr($time, 7, 2) $sec = SubStr($time, 13, 2)
$message = $event.message
$user= $event.user
$Msg = Split($message, ",")
$rs.addnew
$rs.fields.item("SerialNumber").value = $Serno
$rs.fields.item("EventID").value = $ec
$rs.fields.item("UserID").value = Join(Split($user,'fdhc\'),'')
$rs.fields.item("Date").value = $year +'/'+ $month +'/'+ $day
$rs.fields.item("Time").value = $hour +':'+ $min +':'+ $sec
$rs.fields.item("ID").value = Trim(Split($msg[0], ':')[1])
$rs.fields.item("AppName").value = Trim(Split($msg[1], ':')[1])
$rs.fields.item("AppVersion").value = Trim(Split($msg[2], ':')[1])
$rs.fields.item("InvDate").value = @date
$rs.update
Next
$rs.close
; *********************** Sprint Card Inventory ***************************************
If Exist('c:\logfiles\sprintcard.txt')
$SprintData = Readfile('c:\logfiles\sprintcard.txt')
For Each $line in $SprintData
Select
Case InStr($line, 'Manufacturer') $man = Trim(SubStr($line, InStr($line, ':') + 1))
Case InStr($line, 'Model') $mod = Trim(SubStr($line, InStr($line, ':') + 1))
Case InStr($line, 'Revision') $rev = Trim(SubStr($line, InStr($line, ':') + 1))
Case InStr($line, 'ESN') $esn = Trim(SubStr($line, InStr($line, ':') + 1))
Case InStr($line, 'Date') $date= Trim(SubStr($line, InStr($line, ':') + 1))
EndSelect
Next
If $esn
$cmdtxt = "select * from dbo._tbl_SprintCards where SerNo = '$SerNo'"
$cmd.commandtext = $cmdtxt
$rs.open($cmd) $err = @serror
If $rs.eof = -1 $rs.addnew EndIf
$rs.fields.item("SerNo").value = $serno
$rs.fields.item("ESN").value = $esn
$rs.fields.item("Manufacturer").value = $man
$rs.fields.item("Model").value = $mod
$rs.fields.item("Revision").value = $rev
$rs.fields.item("InvDate").value = $date
$rs.update $err = @serror
$rs.close
EndIf
EndIf
; *********************** Bitlocker Inventory ***************************************
Shell 'cmd /c echo '+@DATE + '> c:\logfiles\bitlocker.txt'
Shell 'cmd /c manage-bde.exe -status >> c:\logfiles\bitlocker.txt'
Shell 'cmd /c manage-bde.exe -protectors -get c: >> c:\logfiles\bitlocker.txt'
If Exist('c:\logfiles\bitlocker.txt')
$BitData = Readfile('c:\logfiles\bitlocker.txt')
For $count = 0 to UBound($bitdata) - 1
$line = $bitdata[$count]
Select
Case InStr($line, '[OS Volume]') $Vol = Trim(SubStr($bitdata[$count - 1], InStr($bitdata[$count - 1], ':') - 1, 2))
Case InStr($line, 'Bitlocker Version') $Ver = Trim(SubStr($line, InStr($line, ':') + 1))
Case InStr($line, 'Conversion Status') $Con = Trim(SubStr($line, InStr($line, ':') + 1))
Case InStr($line, 'Encryption Method') $Enc = Trim(SubStr($line, InStr($line, ':') + 1))
Case InStr($line, 'Key Protectors:')
Do
$count = $count +1
If Trim($bitdata[$count]) <> 'Data Recovery Agent (Certificate Based)' And Not InStr($tpm,Trim($bitdata[$count]))
$TPM = $TPM + "," + Trim($bitdata[$count])
EndIf
Until Trim($bitdata[$count + 1]) = ''
$TPM = SubStr($TPM,2)
Case InStr($line, 'External Key file name') $Key = Trim($bitdata[$count + 1])
EndSelect
Next
$data = $vol +', '+$ver + ', ' +$con + ', ' +$enc + ', ' +$tpm + ', ' +$key + ', ' +@DATE
Shell 'cmd /c echo "' + $data + '" >> c:\logfiles\bitlocker.txt'
If $vol
$cmdtxt = "select * from dbo._tbl_bitlocker where SerialNumber = '$SerNo'"
$cmd.commandtext = $cmdtxt
$rs.open($cmd) $err = @serror
Shell 'cmd /c echo open: ' + $err + '>> c:\logfiles\bitlocker.txt'
If $rs.eof = -1 $rs.addnew EndIf
$rs.fields.item("SerialNumber").value = $serno
$rs.fields.item("Volume").value = $vol
$rs.fields.item("Version").value = $ver
$rs.fields.item("Conversion").value = $Con
$rs.fields.item("Encryption").value = $enc
$rs.fields.item("Protection").value = $TPM
$rs.fields.item("Keys").value = $key
$rs.fields.item("InvDate").value = @date
$rs.update $err = @serror
Shell 'cmd /c echo update: ' + $err + '>> c:\logfiles\bitlocker.txt'
$rs.close
EndIf
EndIf
;**************************************************************************************************
Function ReadFile($file)
Dim $lf, $f, $_, $t
$lf = Chr(10)
$f = FreeFileHandle
$_ = Open($f, $file, 2)
If @error Exit 1 EndIf
Do $t = $t + $lf + ReadLine($f) Until @error
$_ = Close($f)
$ReadFile = Split(SubStr($t, 2), $lf)
EndFunction
Function WMIQuery($what,$from,optional $computer,optional $where, optional $x)
Dim $strQuery, $objEnumerator, $value
If Not $computer $computer="@WKSTA" EndIf
$strQuery = "Select $what From $from"
If $where And $x $strQuery = $strQuery + " Where $where = '$x'" EndIf
$SystemSet = GetObject("winmgmts:{impersonationLevel=impersonate}!//$computer")
$objEnumerator = $SystemSet.ExecQuery($strQuery)
For Each $objInstance in $objEnumerator
If @Error = 0 And $objInstance <> ""
$=Execute("$$value = $$objInstance.$what")
$WMIQuery="$value"+"|"+"$WMIQuery"
EndIf
Next
$WMIQuery=Left($WMIQuery,Len($WMIQuery)-1)
Exit @error
EndFunction
Function GroupMembers($target, optional $full)
Dim $group, $member, $name, $temp
$group = GetObject('WinNT://' + $target)
If @error Exit 1 EndIf
For Each $member in $group.members
Select
Case $member.class = "user"
$temp = $temp +Chr(13)+ $member.name
Case $member.class = "group"
If $full
For Each $name in $member.members
$temp = $temp +Chr(13)+ $name.name
Next
Else
$temp = $temp +Chr(13)+ $member.name
EndIf
EndSelect
Next
$GroupMembers = Split(SubStr($temp,2),Chr(13))
EndFunction
Function FilterArray($arr_Source, $arr_Filter)
For $item = 0 to UBound($arr_Source)
If Not AScan($arr_Filter,$arr_Source[$item]) = -1 Or Left($arr_Source[$item],5) = 'S-1-5'
$arr_Source[$item] = ''
Else
$arr_Source[$item] = $arr_Source[$item]+ '||'
EndIf
Next
$filterArray = Split(Join($arr_source,''),'||')
EndFunction
;Function looks for a specific running process and returns the PID of it
Function FindPROC($COMPUTER,$PROC,optional $terminate)
Dim $GetObject, $Select
$GetObject="winmgmts:{impersonationLevel=impersonate}!//$COMPUTER"
$select="select * from Win32_Process where Name='$PROC'"
For Each $Process in GetObject("$GetObject").ExecQuery("$select")
If $terminate $Process.Terminate EndIf
$FindPROC=$Process.ProcessId
Next
EndFunction