Copie o Script e cole no PowerShell
            
            


# Definindo o caminho e nome do arquivo de log. O arquivo será salvo na Área de Trabalho.
$logPath = "$($env:UserProfile)\Desktop\RelatorioPC.txt"

# Criando o conteúdo inicial do relatório
$report = @"
--------------------------------------------------
  Relatório de Informações do Sistema - $env:COMPUTERNAME
--------------------------------------------------
"@

# --- Informações do Sistema e Processador ---
try {
    $processor = Get-CimInstance -ClassName Win32_Processor
    $report += @"

--- PROCESSADOR ---
Marca: $($processor.Manufacturer)
Modelo: $($processor.Name)
Núcleos: $($processor.NumberOfCores)
Velocidade: $([math]::Round($processor.MaxClockSpeed / 1000,2)) GHz
"@
} catch {
    $report += "`n--- PROCESSADOR ---`nNão foi possível obter as informações do processador."
}

# --- Informações de Armazenamento ---
try {
    $report += @"  

--- ARMAZENAMENTO ---
"@

    $disks = Get-PhysicalDisk
    $volumes = Get-Volume | Where-Object { $_.DriveLetter -ne $null }
    $diskDrives = Get-CimInstance Win32_DiskDrive # pega InterfaceType

    foreach ($vol in $volumes) {
        # Tenta correlacionar o volume com o disco físico e a interface
        $disk = $disks | Select-Object -First 1
        $driveInfo = $diskDrives | Select-Object -First 1

        $totalSizeGB = [math]::Round($vol.Size / 1GB, 2)
        $freeSpaceGB = [math]::Round($vol.SizeRemaining / 1GB, 2)
        $usedSpaceGB = $totalSizeGB - $freeSpaceGB

        $mediaType = if ($disk.MediaType) { $disk.MediaType } else { "Desconhecido" }
        $busType   = if ($disk.BusType) { $disk.BusType } else { "Desconhecido" }
        $interface = if ($driveInfo.InterfaceType) { $driveInfo.InterfaceType } else { $busType }

        switch -Regex ($interface) {
            "NVMe"  { $tipoFinal = "SSD NVMe" }
            "SATA"  { if ($mediaType -eq "SSD") { $tipoFinal = "SSD SATA" } else { $tipoFinal = "HDD SATA" } }
            "USB"   { $tipoFinal = "Disco USB" }
            "IDE"   { if ($mediaType -eq "SSD") { $tipoFinal = "SSD IDE" } else { $tipoFinal = "HDD IDE" } }
            default { $tipoFinal = $mediaType }
        }

        $report += @"
Nome: $($vol.FileSystemLabel) ($($vol.DriveLetter):)
Modelo: $($disk.FriendlyName)
Tipo de Armazenamento: $tipoFinal
Interface: $interface
Espaço Total: $totalSizeGB GB
Espaço Utilizado: $usedSpaceGB GB
Espaço Livre: $freeSpaceGB GB
"@
    }

    # Listagem geral dos discos físicos
    $report += "`n--- LISTA DE DISCOS FÍSICOS (Get-PhysicalDisk) ---`n"
    foreach ($d in $disks) {
        $report += "Modelo: $($d.FriendlyName) | Tipo: $($d.MediaType) | BusType: $($d.BusType)`n"
    }

} catch {
    $report += "`n--- ARMAZENAMENTO ---`nNão foi possível obter as informações de armazenamento."
}

# --- Informações de Memória RAM (Melhorado com a lógica do Código 2) ---
try {
    # Extrai informações detalhadas de cada pente de RAM, incluindo o tipo (DDR, DDR4, etc.)
    $ramInfo = Get-WmiObject Win32_PhysicalMemory | ForEach-Object {
        $ramType = switch ($_.MemoryType) {
            20 { "DDR" }
            21 { "DDR2" }
            24 { "DDR3" }
            26 { "DDR4" }
            34 { "DDR5" }
            default { "Desconhecido ($($_.MemoryType))" }
        }
        [PSCustomObject]@{
            Fabricante = $_.Manufacturer
            Modelo = $_.PartNumber.Trim()
            Tipo = $ramType
            "Tamanho (GB)" = [math]::Round($_.Capacity / 1GB, 2)
            "Frequência (MHz)" = $_.Speed
            "Frequência Atual (MHz)" = $_.ConfiguredClockSpeed
            Slot = $_.DeviceLocator
        }
    }

    $totalMemoryGB = [math]::Round((Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)
    
    $report += @"

--- MEMÓRIA RAM ---
Memória Total Instalada: $totalMemoryGB GB
Slots de Memória Ocupados: $($ramInfo.Count)
"@
    
    # Adicionando os detalhes de cada pente de RAM no formato de tabela solicitado
    $report += "`nDetalhes da Memória RAM (Pentes):`n"
    # Captura a tabela formatada, usando Out-String com largura alta para garantir que a tabela não quebre linhas.
    $ramTable = $ramInfo | Format-Table -AutoSize | Out-String -Width 150
    $report += $ramTable
    
} catch {
    $report += "`n--- MEMÓRIA RAM ---`nNão foi possível obter as informações de memória RAM."
}

# --- Informações de Rede ---
try {
    # Filtra apenas adaptadores de rede que estão ativos e possuem IP
    $nic = Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true }
    $report += @"

--- INFORMAÇÕES DE REDE ---
IP: $($nic.IPAddress -join ', ')
MAC: $($nic.MacAddress -join ', ')
"@
} catch {
    $report += "`n--- INFORMAÇÕES DE REDE ---`nNão foi possível obter as informações de rede."
}

# --- Periféricos USB/Wireless ---
try {
    # Busca por mouses e teclados wireless (pode incluir dispositivos USB também)
    $usbDevices = Get-PnpDevice -Class "Mouse" | Where-Object { $_.FriendlyName -like "*wireless*" }
    $usbDevices += Get-PnpDevice -Class "Keyboard" | Where-Object { $_.FriendlyName -like "*wireless*" }
    # Adiciona outros dispositivos USB genéricos, excluindo classes como HID (Human Interface Devices)
    $usbDevices += Get-PnpDevice | Where-Object { $_.FriendlyName -like "*usb*" -and ($_.Class -notlike "*HID*") }
    
    # Remove duplicatas
    $usbDevices = $usbDevices | Select-Object -Unique -ExpandProperty FriendlyName
    
    $report += @"

--- DISPOSITIVOS CONECTADOS (USB/Wireless) ---
"@
    if ($usbDevices.Count -gt 0) {
        foreach ($deviceName in $usbDevices) {
            $report += "Nome do dispositivo: $deviceName`n"
        }
    } else {
        $report += "Nenhum dispositivo USB wireless ou acoplado foi encontrado."
    }
} catch {
    $report += "`n--- DISPOSITIVOS CONECTADOS (USB/Wireless) ---`nNão foi possível obter as informações dos dispositivos."
}

# --- Fim do Relatório ---
$report += "
--------------------------------------------------
Relatório gerado em: $((Get-Date).ToString('dd/MM/yyyy'))
--------------------------------------------------"

# Salvando o relatório no arquivo principal
# O parâmetro -Force garante que o arquivo seja sobrescrito se já existir
$report | Out-File -FilePath $logPath -Encoding UTF8 -Force

# Mensagem de confirmação
Write-Host "Relatório salvo com sucesso em: $logPath"









            
        
Copiado com sucesso!