none
script em powershell muito lento RRS feed

  • Pergunta

  • Olá, copiei um script da internet para pegar o security eventlog e colocar alguns dados em um csv, modifiquei para minhas necessidades porém ele está muito lento. Um log de 500MB está levando mais de 7 horas para gerar o csv, é utilizado apenas 14% da CPU, já coloquei prioridade alta e todos os núcleos para funcionar. O que posso fazer para melhorar o desempenho??

    Obrigado.

    #colocar o nome do servidor
    	$server = ,"t176682"
    	$out = New-Object System.Text.StringBuilder
    	$out.AppendLine("ServerName,EventID,TimeCreated,UserName,File_or_Folder,AccessMask")
    	$ns = @{e = "http://schemas.microsoft.com/win/2004/08/events/event"}
    	foreach ($svr in $server)  {   
    		
    		#colocar o caminho do arquivo
    		$evts = Get-WinEvent -computer $svr -FilterHashtable @{path="D:\banco-auditoria-security\log-para-convercao\security.evtx"; logname="security"; id="4663"} -oldest
    
    		foreach($evt in $evts) {
    			$xml = [xml]$evt.ToXml()
    
    			$SubjectUserName = Select-Xml -Xml $xml -Namespace $ns -XPath "//e:Data[@Name='SubjectUserName']/text()" | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty Value
    
    			$ObjectName = Select-Xml -Xml $xml -Namespace $ns -XPath "//e:Data[@Name='ObjectName']/text()" | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty Value
    
    			$AccessMask = Select-Xml -Xml $xml -Namespace $ns -XPath "//e:Data[@Name='AccessMask']/text()" | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty Value
    
    			
    			#colocar os usernames para não entrar no log
    			if ($SubjectUserName -ne 'T167226$' -Or $SubjectUserName -notmatch "^[A-Z]:\\$RECYCLE.BIN" ){
    					$out.AppendLine("$($svr),$($evt.id),$($evt.TimeCreated),$SubjectUserName,$ObjectName,$AccessMask")
    					Write-Host $svr
    					Write-Host $evt.id,$evt.TimeCreated,$SubjectUserName,$ObjectName,$AccessMask
    			}
    		}
    	 }
    	$Date = (Get-Date -format "'d'ia dd-MM-yyyy 'h'ora hh-mm-ss")
    	#colcoar caminho para saida do arquivo
    	$out.ToString() | out-file -filepath D:\banco-auditoria-security\logs-cvs\4663Events-$Date.csv

    sexta-feira, 6 de outubro de 2017 20:14