$CorreosEncontrados = [System.Collections.Generic.List[string]]::new() $RegexEmail = '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' $ClassicOutlookPath = "HKCU:\Software\Microsoft\Office" if (Test-Path $ClassicOutlookPath) { $SubKeys = Get-ChildItem -Path $ClassicOutlookPath -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.Name -like "*Outlook*" -or $_.Name -like "*Identity*" } foreach ($Key in $SubKeys) { $Properties = Get-ItemProperty -Path $Key.PSPath -ErrorAction SilentlyContinue foreach ($Prop in $Properties.PSObject.Properties) { if ($Prop.Value -is [string] -and $Prop.Value -match $RegexEmail) { $CorreosEncontrados.Add($Prop.Value.ToLower()) } } } } $NewOutlookPath = "HKCU:\Software\Microsoft\Office\Outlook\Settings\Accounts" if (Test-Path $NewOutlookPath) { Get-ChildItem -Path $NewOutlookPath -ErrorAction SilentlyContinue | ForEach-Object { if ($_.PSChildName -match '@') { $CorreosEncontrados.Add($_.PSChildName.ToLower()) } } } $WindowsAccountsPath = "HKCU:\Software\Microsoft\IdentityCRL\UserExtendedProperties" if (Test-Path $WindowsAccountsPath) { Get-ChildItem -Path $WindowsAccountsPath -ErrorAction SilentlyContinue | ForEach-Object { if ($_.PSChildName -match '@') { $CorreosEncontrados.Add($_.PSChildName.ToLower()) } } } $CuentasOutlook = $CorreosEncontrados | Select-Object -Unique | Where-Object { $_ } $BiosInfo = Get-CimInstance -ClassName Win32_Bios -ErrorAction SilentlyContinue $CompInfo = Get-CimInstance -ClassName Win32_ComputerSystem -ErrorAction SilentlyContinue $SerialNumber = if ($BiosInfo.SerialNumber) { $BiosInfo.SerialNumber.Trim() } else { "No disponible" } $Model = if ($CompInfo.Model) { $CompInfo.Model.Trim() } else { "No disponible" } $Manufacturer = if ($CompInfo.Manufacturer) { $CompInfo.Manufacturer.Trim() } else { "No disponible" } $UsuarioLogueado = "$env:USERDOMAIN\$env:USERNAME" $UsuariosDisponibles = Get-CimInstance -ClassName Win32_UserAccount -Filter "LocalAccount=True" -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Name $DiscosLocales = [System.Collections.Generic.List[Object]]::new() $AllDisks = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" -ErrorAction SilentlyContinue foreach ($Disk in $AllDisks) { if ($Disk.Size -gt 0) { $TotalSizeGB = $Disk.Size / 1GB $FreeSpaceGB = $Disk.FreeSpace / 1GB $UsedSpaceGB = $TotalSizeGB - $FreeSpaceGB $DiscoObj = [PSCustomObject]@{ Unidad = $Disk.DeviceID EspacioLibre = "{0:N2} GB" -f $FreeSpaceGB EspacioUsado = "{0:N2} GB" -f $UsedSpaceGB } $DiscosLocales.Add($DiscoObj) } } $ReporteObjeto = [PSCustomObject]@{ Equipo = $env:COMPUTERNAME Fabricante = $Manufacturer NumeroSerie = $SerialNumber Modelo = $Model UsuarioLogueado = $UsuarioLogueado UsuariosLocales = $UsuariosDisponibles Discos = $DiscosLocales CuentasOutlook = $CuentasOutlook FechaReporte = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") } $JsonPayload = ConvertTo-Json -InputObject $ReporteObjeto -Depth 4 $RutaLocalJSON = "C:\FactorPesca\Reporte_LOG_$env:COMPUTERNAME.json" try { $JsonPayload | Out-File -FilePath $RutaLocalJSON -Encoding utf8 -Force } catch { $JsonPayload | Out-File -FilePath "C:\Users\$env:USERNAME\Reporte_LOG_$env:COMPUTERNAME.json" -Encoding utf8 -Force } $UrlServidor = "http://dev.procesa.app/device/report/api" try { $Response = Invoke-RestMethod -Uri $UrlServidor -Method Post -Body $JsonPayload -ContentType "application/json; charset=utf-8" -ErrorAction Stop } catch { }