Como rastrear qual usuário que instalou um Software no Windows
Em casos onde o usuário de um computador é administrador ou tem permissão de instalar software, as vezes pode ser necessário identificar quem foi o responsável pela instalação de um software indevido ou não licenciado.
Nas novas versões do Windows, por padrão vem habilitado uma série de auditorias, dentre elas a instalação de software. Este recurso registra em log todos as instalações de software. Porém, os logs do Windows nem sempre são amigáveis e fáceis de entender.
Vamos utilizar novamente o powershell para consultar essas informações nos logs do Event Viewer.
Powershell
Com o Powershell é possível consultar os logs do Windows e filtrar os resultados para uma melhor visualização e entendimento. Vamos ver a seguir os princípios básicos da nossa consulta de instalação de software.
Consultando os logs do Windows com Powershell:
PS C:\> Get-WinEvent -FilterHashtable @{LogName=”Application”;ID=11707;ProviderName=”MsiInstaller”}
Para filtrar e ter uma melhor visualização das informações podemos utilizar outros recursos do Powershell, segue abaixo o código que cria uma função chamada Get-AppInstalled:
function Get-AppInstalled{
Param (
[string]$Computer = (Read-Host Remote computer name)
)
cls
$Result = @()
Write-Host “Gathering Event Logs, this can take awhile…”
$ELogs = Get-WinEvent -FilterHashtable @{LogName=”Application”;ID=11707;ProviderName=”MsiInstaller”} -ComputerName $Computer
If ($ELogs)
{ Write-Host “Processing…”
ForEach ($Log in $ELogs)
{
$Result += New-Object PSObject -Property @{
Time = $Log.TimeCreated
Application = $Log.Message
User = (New-Object System.Security.Principal.SecurityIdentifier $Log.UserID.Value).Translate([System.Security.Principal.NTAccount])
}
}
$Result | Select Time,Application,User | Sort Time -Descending | Out-GridView
Write-Host “Done.”
}
Else
{
Write-Host “Problem with $Computer.”
Write-Host “If you see a ‘Network Path not found’ error, try starting the Remote Registry service on that computer.”
Write-Host “Or there are no logon/logoff events (XP requires auditing be turned on)”
}
}
Após executar o código acima basta executar a função na linha de comando do powershell para obter as informações sobre instalações recentes de software.
PS C:\> Get-AppInstalled
Remote computer name: <nome do computador>
Caso você deseje obter o histórico de login no computador local basta digitar o hostname.
Obrigado por disponibilizar o script. Já será utilizado aqui na firma.
Bom trabalho!
Parabéns pelo artigo. Muito útil para afministradores de rede.