You are a helpful assistant.
system
Sử dụng PowerShell, viết tập lệnh truy xuất thông tin về hệ thống máy tính cục bộ bao gồm phiên bản hệ điều hành, RAM đã cài đặt, dung lượng ổ đĩa, cấu hình mạng và các tiến trình đang chạy, đồng thời yêu cầu xử lý lỗi, ghi lại thông tin vào tệp và sử dụng các hàm để tổ chức mã, với định dạng đầu ra là JSON để cấu trúc dữ liệu.
user
Dưới đây là một tập lệnh PowerShell để truy xuất thông tin hệ thống máy tính cục bộ và lưu trữ thông tin đó dưới dạng JSON:

```powershell
# Hàm để lấy thông tin hệ điều hành
function Get-OperatingSystemInfo {
    try {
        $os = Get-CimInstance -ClassName Win32_OperatingSystem
        return @{
            "Name" = $os.Caption
            "Version" = $os.Version
            "Architecture" = $os.OSArchitecture
        }
    } catch {
        Write-Error "Không thể lấy thông tin hệ điều hành: $_"
        return $null
    }
}

# Hàm để lấy thông tin RAM
function Get-MemoryInfo {
    try {
        $memory = Get-CimInstance -ClassName Win32_PhysicalMemory
        $totalMemory = ($memory | Measure-Object -Property Capacity -Sum).Sum
        return @{
            "TotalInstalledRAM" = [Math]::Round($totalMemory / 1GB, 2)
        }
    } catch {
        Write-Error "Không thể lấy thông tin RAM: $_"
        return $null
    }
}

# Hàm để lấy thông tin ổ đĩa
function Get-DiskInfo {
    try {
        $disks = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3"
        return $disks | ForEach-Object {
            @{
                "DeviceID" = $_.DeviceID
                "SizeGB" = [Math]::Round($_.Size / 1GB, 2)
                "FreeSpaceGB" = [Math]::Round($_.FreeSpace / 1GB, 2)
            }
        }
    } catch {
        Write-Error "Không thể lấy thông tin ổ đĩa: $_"
        return $null
    }
}

# Hàm để lấy thông tin cấu hình mạng
function Get-NetworkInfo {
    try {
        $networkAdapters = Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true }
        return $networkAdapters | ForEach-Object {
            @{
                "Description" = $_.Description
                "IPAddress" = $_.IPAddress
                "MACAddress" = $_.MACAddress
            }
        }
    } catch {
        Write-Error "Không thể lấy thông tin mạng: $_"
        return $null
    }
}

# Hàm để lấy thông tin các tiến trình đang chạy
function Get-ProcessInfo {
    try {
        $processes = Get-Process
        return $processes | Select-Object -Property Name, Id, CPU, WS
    } catch {
        Write-Error "Không thể lấy thông tin tiến trình: $_"
        return $null
    }
}

# Hàm chính để thu thập tất cả thông tin
function Get-SystemInfo {
    return @{
        "OperatingSystem" = Get-OperatingSystemInfo
        "Memory" = Get-MemoryInfo
        "Disks" = Get-DiskInfo
        "Network" = Get-NetworkInfo
        "Processes" = Get-ProcessInfo
    }
}

# Thu thập thông tin hệ thống
$systemInfo = Get-SystemInfo

# Chuyển đổi thông tin thành định dạng JSON
$jsonOutput = $systemInfo | ConvertTo-Json -Depth 4

# Ghi thông tin vào tệp
$outputFile = "SystemInfo.json"
try {
    Set-Content -Path $outputFile -Value $jsonOutput -Encoding UTF8
    Write-Host "Thông tin hệ thống đã được ghi vào tệp $outputFile"
} catch {
    Write-Error "Không thể ghi thông tin vào tệp: $_"
}
```

Tập lệnh này sử dụng các hàm để tổ chức mã, xử lý lỗi và ghi thông tin hệ thống vào một tệp JSON. Bạn có thể chạy tập lệnh này trong PowerShell để thu thập thông tin hệ thống của máy tính cục bộ.
assistant