ai-courseware/openClaw/OpenClawPrecheck.ps1

270 lines
8.5 KiB
PowerShell

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$script:results = @()
function Log-Message {
param([string]$message)
$txtLog.AppendText("$message`r`n")
$txtLog.ScrollToCaret()
}
function Add-Result {
param(
[string]$name,
[string]$status,
[string]$current,
[string]$required,
[bool]$passed
)
$script:results += [PSCustomObject]@{
Name = $name
Status = $status
Current = $current
Required = $required
Passed = $passed
}
Update-ResultsTable
}
function Update-ResultsTable {
$dgvResults.Rows.Clear()
foreach ($r in $script:results) {
$row = $dgvResults.Rows.Add($r.Name, $r.Status, $r.Current, $r.Required)
if ($r.Status -like "*通过*" -or $r.Status -like "*OK*") {
$dgvResults.Rows[$row].DefaultCellStyle.ForeColor = [System.Drawing.Color]::Green
} elseif ($r.Status -like "*失败*" -or $r.Status -like "*FAIL*") {
$dgvResults.Rows[$row].DefaultCellStyle.ForeColor = [System.Drawing.Color]::Red
} else {
$dgvResults.Rows[$row].DefaultCellStyle.ForeColor = [System.Drawing.Color]::Orange
}
}
}
function Check-OS {
Log-Message "`n[1/5] 检查操作系统..."
$os = Get-CimInstance Win32_OperatingSystem
$osName = $os.Caption
$is64bit = [Environment]::Is64BitOperatingSystem
$status = "[OK] 通过"
$passed = $true
if (-not $osName -like "*Windows 11*") {
$status = "[FAIL] 失败"
$passed = $false
}
if (-not $is64bit) {
$status = "[FAIL] 失败"
$passed = $false
}
$arch = if ($is64bit) { "64位" } else { "32位" }
$current = "$osName ($arch)"
Add-Result "操作系统" $status $current "Windows 11 64位" $passed
Log-Message " 系统: $current"
Log-Message " 结果: $status"
}
function Check-Memory {
Log-Message "`n[2/5] 检查内存..."
$os = Get-CimInstance Win32_OperatingSystem
$totalMemoryGB = [math]::Round($os.TotalVisibleMemorySize / 1MB, 2)
$status = "[OK] 通过"
$passed = $true
if ($totalMemoryGB -lt 8) {
$status = "[FAIL] 失败"
$passed = $false
}
Add-Result "内存" $status "$totalMemoryGB GB" ">= 8 GB" $passed
Log-Message " 总内存: $totalMemoryGB GB"
Log-Message " 结果: $status"
}
function Check-Disk {
Log-Message "`n[3/5] 检查磁盘空间..."
$drive = Get-PSDrive C
$freeGB = [math]::Round($drive.Free / 1GB, 2)
$status = "[OK] 通过"
$passed = $true
if ($freeGB -lt 10) {
$status = "[FAIL] 失败"
$passed = $false
}
Add-Result "磁盘空间" $status "$freeGB GB 可用" ">= 10 GB" $passed
Log-Message " 可用空间: $freeGB GB"
Log-Message " 结果: $status"
}
function Check-Network {
Log-Message "`n[4/5] 检查网络连接..."
try {
$response = Invoke-WebRequest -Uri "https://www.baidu.com" -TimeoutSec 5 -UseBasicParsing
$status = "[OK] 通过"
$passed = $true
$current = "已连接"
} catch {
$status = "[FAIL] 失败"
$passed = $false
$current = "无法连接"
}
Add-Result "网络连接" $status $current "能正常上网" $passed
Log-Message " 网络: $current"
Log-Message " 结果: $status"
}
function Check-Admin {
Log-Message "`n[5/5] 检查管理员权限..."
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
$status = "[OK] 通过"
$passed = $true
$current = ""
if (-not $isAdmin) {
$status = "[WARN] 建议"
$passed = $false
$current = ""
}
Add-Result "管理员权限" $status $current "建议以管理员身份运行" $passed
Log-Message " 管理员: $current"
Log-Message " 结果: $status"
}
function Start-Checks {
$btnCheck.Enabled = $false
$progressBar.Visible = $true
$progressBar.Style = [System.Windows.Forms.ProgressBarStyle]::Marquee
$script:results = @()
Update-ResultsTable
$lblSummary.Text = ""
Log-Message "`n$('=' * 60)"
Log-Message "开始系统检查..."
Log-Message "$('=' * 60)"
Check-OS
Check-Memory
Check-Disk
Check-Network
Check-Admin
$progressBar.Visible = $false
$btnCheck.Enabled = $true
$passedCount = ($script:results | Where-Object { $_.Passed }).Count
$totalCount = $script:results.Count
Log-Message "`n$('=' * 60)"
Log-Message "检查完成: $passedCount/$totalCount 项通过"
Log-Message "$('=' * 60)"
if ($passedCount -eq $totalCount) {
$lblSummary.Text = "所有检查通过!您的系统符合 OpenClaw 安装要求。"
$lblSummary.ForeColor = [System.Drawing.Color]::Green
} else {
$lblSummary.Text = "$($totalCount - $passedCount) 项检查未通过,请查看检查结果。"
$lblSummary.ForeColor = [System.Drawing.Color]::Orange
}
}
$form = New-Object System.Windows.Forms.Form
$form.Text = "OpenClaw 前置条件检查工具"
$form.Size = New-Object System.Drawing.Size(900, 700)
$form.StartPosition = "CenterScreen"
$form.Font = New-Object System.Drawing.Font("Microsoft YaHei UI", 9)
$lblTitle = New-Object System.Windows.Forms.Label
$lblTitle.Text = "OpenClaw 前置条件检查"
$lblTitle.Font = New-Object System.Drawing.Font("Microsoft YaHei UI", 16, [System.Drawing.FontStyle]::Bold)
$lblTitle.Location = New-Object System.Drawing.Point(20, 20)
$lblTitle.Size = New-Object System.Drawing.Size(500, 30)
$form.Controls.Add($lblTitle)
$btnPanel = New-Object System.Windows.Forms.Panel
$btnPanel.Location = New-Object System.Drawing.Point(20, 60)
$btnPanel.Size = New-Object System.Drawing.Size(840, 40)
$form.Controls.Add($btnPanel)
$btnCheck = New-Object System.Windows.Forms.Button
$btnCheck.Text = "开始检查"
$btnCheck.Location = New-Object System.Drawing.Point(0, 5)
$btnCheck.Size = New-Object System.Drawing.Size(120, 30)
$btnCheck.Add_Click({ Start-Checks })
$btnPanel.Controls.Add($btnCheck)
$btnExit = New-Object System.Windows.Forms.Button
$btnExit.Text = "退出"
$btnExit.Location = New-Object System.Drawing.Point(760, 5)
$btnExit.Size = New-Object System.Drawing.Size(80, 30)
$btnExit.Add_Click({ $form.Close() })
$btnPanel.Controls.Add($btnExit)
$progressBar = New-Object System.Windows.Forms.ProgressBar
$progressBar.Location = New-Object System.Drawing.Point(20, 110)
$progressBar.Size = New-Object System.Drawing.Size(840, 20)
$progressBar.Visible = $false
$form.Controls.Add($progressBar)
$tabControl = New-Object System.Windows.Forms.TabControl
$tabControl.Location = New-Object System.Drawing.Point(20, 140)
$tabControl.Size = New-Object System.Drawing.Size(840, 430)
$form.Controls.Add($tabControl)
$tabResults = New-Object System.Windows.Forms.TabPage
$tabResults.Text = "检查结果"
$tabControl.Controls.Add($tabResults)
$dgvResults = New-Object System.Windows.Forms.DataGridView
$dgvResults.Location = New-Object System.Drawing.Point(10, 10)
$dgvResults.Size = New-Object System.Drawing.Size(800, 380)
$dgvResults.AllowUserToAddRows = $false
$dgvResults.ReadOnly = $true
$dgvResults.SelectionMode = "FullRowSelect"
$dgvResults.AutoSizeColumnsMode = "Fill"
[void]$dgvResults.Columns.Add("Name", "检查项")
[void]$dgvResults.Columns.Add("Status", "状态")
[void]$dgvResults.Columns.Add("Current", "当前值")
[void]$dgvResults.Columns.Add("Required", "要求")
$tabResults.Controls.Add($dgvResults)
$tabLog = New-Object System.Windows.Forms.TabPage
$tabLog.Text = "详细日志"
$tabControl.Controls.Add($tabLog)
$txtLog = New-Object System.Windows.Forms.TextBox
$txtLog.Location = New-Object System.Drawing.Point(10, 10)
$txtLog.Size = New-Object System.Drawing.Size(800, 380)
$txtLog.Multiline = $true
$txtLog.ScrollBars = "Vertical"
$txtLog.ReadOnly = $true
$txtLog.Font = New-Object System.Drawing.Font("Consolas", 9)
$tabLog.Controls.Add($txtLog)
$lblSummary = New-Object System.Windows.Forms.Label
$lblSummary.Text = ""
$lblSummary.Location = New-Object System.Drawing.Point(20, 580)
$lblSummary.Size = New-Object System.Drawing.Size(840, 30)
$lblSummary.Font = New-Object System.Drawing.Font("Microsoft YaHei UI", 11)
$form.Controls.Add($lblSummary)
Log-Message "欢迎使用 OpenClaw 前置条件检查工具!"
Log-Message "点击「开始检查」按钮开始检查您的系统。"
[void]$form.ShowDialog()