Precisei criar um mecanismo simples para monitorar estações Windows e enviar periodicamente para minha API informações básicas:
- Nome da estação
- IP interno
- Status (online)
Tudo isso sem instalar nada além do próprio Windows.
1. O Script PowerShell (status.ps1)
# Nome e IP
$hostname = $env:COMPUTERNAME
$ip = (Get-NetIPAddress -AddressFamily IPv4 `
| Where-Object { $_.IPAddress -notlike "169.254.*" -and $_.IPAddress -ne "127.0.0.1" } `
| Select-Object -First 1 -ExpandProperty IPAddress)
# Endpoint completo
$uri = "http://api/statuspphp=online&estacao=$hostname&ip=$ip"
# Log local
$log = "C:\status_reporter.log"
try {
Invoke-WebRequest -Uri $uri -UseBasicParsing -TimeoutSec 5
$msg = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') OK - $hostname / $ip"
}
catch {
$msg = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ERRO - $hostname / $ip - $($_.Exception.Message)"
}
Add-Content -Path $log -Value $msg
Esse arquivo deve ficar em:
C:\Scripts\status.ps1
Sugiro que rode o arquivo pelo powerShell manualmente pra teste, e, caso não funcione pela regra de bloqueio de scripts, clique aqui para ler o post de como liberar essa função.
2. Criando a Tarefa Agendada (como um cron de 5 minutos)
A ideia é rodar no startup e depois a cada 5 minutos, infinitamente.
Execute em PowerShell (admin):
# Trigger 1: no boot
$triggerBoot = New-ScheduledTaskTrigger -AtStartup
# Trigger 2: a cada 5 minutos, duração "infinita aceitável"
$trigger5 = New-ScheduledTaskTrigger `
-Once -At (Get-Date) `
-RepetitionInterval (New-TimeSpan -Minutes 5) `
-RepetitionDuration (New-TimeSpan -Days 365)
# Ação 100% silenciosa
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Monitor\status.ps1 > $null 2>&1"
# Registrar a tarefa
Register-ScheduledTask `
-TaskName "StatusReporterDevdata" `
-Trigger $triggerBoot, $trigger5 `
-Action $action `
-RunLevel Highest
3. Resultado
Pronto:
Cada estação Windows envia automaticamente para sua API o status atual, hostname e IP interno — sem depender de usuário, sem instalar cURL, sem serviço adicional.
