Skip to content

Windows:只读采集服务状态快照 ​

本篇以Windows 只读服务快照为例;前置是Windows 11/Server 2022、PowerShell 7.4 与执行令牌。源码与输入与下文配置共用同一份文件,示例未执行。

教学版本族:Windows 11 与 Windows Server 2022;PowerShell 7.4 语法;Windows PowerShell 5.1 的编码和模块差异单独核对。核对日期2026-10-17,不称为2026最新版。示例未执行,配置与命令需按目标环境验收。

只读服务快照契约 ​

Windows 报告示例未执行。需要已有 Windows 11/Server2022 和 PowerShell 7.4;仅调用只读 Get-Service,统计总数与运行数量,输出一个对象。不读取网络、不控制服务、不写注册表、不需要第三方模块。依赖声明、全部源码及 README 随示例交付。

完整报告与输出责任 ​

Windows 报告脚本先检查运行平台,再用 Get-Service 获取当前授权可见对象;-ErrorAction Stop 让采集失败进入 catch,避免部分数据写成成功。统计来自同一数组快照,但采集期间服务状态仍可能改变;输出仅反映观察时刻,不保证事务一致。源码没有安装、重启或提升逻辑。

powershell
#requires -Version 7.4
[CmdletBinding()]
param()
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
if (-not $IsWindows) {
    [Console]::Error.WriteLine('Windows only')
    exit 2
}
try {
    $services = @(Get-Service -ErrorAction Stop)
    $running = @($services | Where-Object Status -EQ Running)
    [pscustomobject]@{
        ObservedUtc = [DateTimeOffset]::UtcNow.ToString('o')
        Total = $services.Count
        Running = $running.Count
    }
    exit 0
}
catch {
    [Console]::Error.WriteLine('Service snapshot failed; no complete report produced.')
    exit 1
}
text
# Windows 11 or Windows Server 2022; existing PowerShell 7.4.
# Built-in Microsoft.PowerShell.Management. No downloaded modules.

完整项目位于仓库 examples/m5-next-windows/;README给出全部未来自跑命令与精确清理步骤,正文包含全部源码和输入。

markdown
# Windows 服务只读快照(未执行)

完整文件:snapshot.ps1、requirements.txt、本说明。已有Windows11/Server2022、PowerShell7.4和内置Management模块,普通用户即可;服务列表权限受主机策略影响。无网络、注册表写入、服务控制和第三方依赖。

本轮不执行、不点调用、不改执行策略。未来读者在获准执行脚本的隔离主机自跑:

```powershell
pwsh -NoProfile -File .\snapshot.ps1
$LASTEXITCODE
```

成功预期一个对象,含ObservedUtc、Total、Running,退出0;数字随机器变化,Running不大于Total。非Windows退出2;Get-Service失败退出1,stderr仅有简短失败摘要,stdout不含完整对象。不把所有服务Running作为健康标准。

失败先查看实际宿主版本与模块、身份及主机策略,不自动提权,不改服务。加载阶段策略错误不是业务错误路径测试通过;应遵守组织签名流程。恢复无需服务回滚,因为脚本只读。清理只删除用户复制的本例文件及自行重定向的报告;删除前核对完整绝对路径和文件归属,不递归删除系统日志。

成功与失败预期 ​

Windows 报告预期输出 ObservedUtc、Total 与 Running 三字段,其中 Running 不大于 Total,数字随机器变化。非 Windows 主机退出 2,采集失败退出 1;失败时只给错误摘要,不输出完整报告。PowerShell 显示表格只是视图,若读者需要 CSV 应在格式化前导出。

快照练习与解答 ​

题目:把 Running 等于 Total 当作“机器健康”是否合理?为什么不自动停止 Stopped 服务?

参考解答:有的服务按需启动,服务生命周期与业务可用性不同;Stopped 是合法状态。应先定义目标服务与成功契约,再采集有针对性的状态,不能用全机快照触发未经授权的修复。

核对资料 ​

继续阅读