I wanto para rastrear los comandos de PowerShell que son ejecutados por los usuarios en la intranet. ¿Cómo puedo hacer esto?
Necesito la información del usuario y sus comandos ejecutados. ¿Es posible?
Edición 1: supongo que puedo usar;
Set-PSDebug -Trace 1
¿Cómo puedo crear un script que luego pueda implementar en toda la intranet? También uso un orquestador.
Edición 2: lo intenté;
$created = Get-WinEvent -FilterHashtable @{ ProviderName="Microsoft-Windows-PowerShell"; Id = 4104 } #| Where-Object { $_.<...> }
$sortedScripts = $created | sort { $_.Properties[0].Value }
$mergedScript = -join ($sortedScripts | % { $_.Properties[2].Value })
Y obtuve esta salida;
DEBUG: 1+ >>>> $created = Get-WinEvent -FilterHashtable @{ ProviderName="Microsoft-Windows-PowerShell"; Id = 4104 }# | Where-Object { $_.<...> }
DEBUG: 2+ >>>> $sortedScripts = $created | sort { $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort >>>> { $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort { >>>> $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort { $_.Properties[0].Value >>>> }
DEBUG: 2+ $sortedScripts = $created | sort >>>> { $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort { >>>> $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort { $_.Properties[0].Value >>>> }
DEBUG: 2+ $sortedScripts = $created | sort >>>> { $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort { >>>> $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort { $_.Properties[0].Value >>>> }
DEBUG: 2+ $sortedScripts = $created | sort >>>> { $_.Properties[0].Value }
DEBUG: 2+ $sortedScripts = $created | sort { >>>> $_.Properties[0].Value }...
Comenté los códigos de canalización porque no pude obtener "$ _. < ... >" parámetro.
Edit 3: Esto funciona perfectamente; Primero escribí el Bloqueo de código de habilitación de ScriptBlock de Microsoft
function Enable-PSScriptBlockLogging {
[CmdletBinding()]
param ()
$BasePath = "HKLM:\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"
if (-not (Test-Path $BasePath)) {
Write-Verbose "ScriptBlockLogging registry key doesn't exist. Creating now."
$null = New-Item $BasePath –Force
Write-Verbose "Setting registry key value to 1 of type DWORD."
$null = New-ItemProperty $BasePath -Name EnableScriptBlockLogging -Value "1" -PropertyType DWORD
} else {
if ((Get-ItemProperty -Path $BasePath).EnableScriptBlockLogging.getType().Name -eq 'Int32') {
Write-Verbose "Key exists, updating value to 1."
Set-ItemProperty $BasePath -Name EnableScriptBlockLogging -Value "1"
} else {
Write-Verbose "Key exists of wrong data type, removing existing entry."
Remove-ItemProperty $BasePath -Name EnableScriptBlockLogging
Write-Verbose "Setting new registry key value to 1 of type DWORD."
$null = New-ItemProperty $BasePath -Name EnableScriptBlockLogging -Value "1" -PropertyType DWORD
}
}
}
Luego, cuando abro el Visor de eventos GOTCHA! Los registros se ven perfectamente. Ahora necesito administrar estos registros con PowerShell.