You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现输入序号启停Windows服务的PowerShell脚本

实现按序号启停指定Windows服务

需求背景

已将Windows服务的显示名称存储在C:\Services\Listofservices.txt中,内容如下:

Print Spooler
Windows Update
Remote Desktop Services

需要实现:展示带序号的服务列表,用户输入序号即可选择对应服务,再指定启停操作完成服务控制。

完整实现脚本

# 读取服务显示名称列表到数组
$serviceDisplayNames = Get-Content 'C:\Services\Listofservices.txt'

# 打印带序号的服务列表
Write-Host "=== 可选服务列表 ==="
for ($idx = 0; $idx -lt $serviceDisplayNames.Count; $idx++) {
    Write-Host "$($idx + 1). $($serviceDisplayNames[$idx])"
}

# 获取并验证用户输入的序号
$inputNum = Read-Host "请输入要操作的服务序号"
if (-not ($inputNum -match '^\d+$') -or [int]$inputNum -lt 1 -or [int]$inputNum -gt $serviceDisplayNames.Count) {
    Write-Host "错误:请输入1到$($serviceDisplayNames.Count)之间的有效数字"
    exit
}

# 根据序号获取对应的服务显示名称
$targetDisplayName = $serviceDisplayNames[[int]$inputNum - 1]
Write-Host "已选中服务:$targetDisplayName"

# 获取用户指定的操作并执行
$operation = Read-Host "请输入操作指令(start/stop)"
try {
    $service = Get-Service -DisplayName $targetDisplayName -ErrorAction Stop
    switch ($operation.ToLower()) {
        'start' {
            $service | Start-Service -ErrorAction Stop
            Write-Host "成功启动服务:$targetDisplayName"
        }
        'stop' {
            $service | Stop-Service -ErrorAction Stop
            Write-Host "成功停止服务:$targetDisplayName"
        }
        default {
            Write-Host "错误:仅支持start或stop指令"
        }
    }
}
catch {
    Write-Host "操作失败:$_"
}

关键说明

  1. 数组存储服务列表:用Get-Content将文件内容读取为数组,每个元素对应一个服务显示名称,方便通过索引快速定位。
  2. 输入验证:确保用户输入的是有效数字且在序号范围内,避免无效输入导致脚本报错。
  3. 服务对象匹配:因为文件中存储的是服务显示名称(如Print Spooler),而非系统识别的服务名(如Spooler),所以必须用Get-Service -DisplayName获取服务对象后再执行启停操作,这是之前脚本失效的核心原因。
  4. 错误捕获:加入try/catch和-ErrorAction Stop,可以捕获服务不存在、权限不足等异常并给出明确提示。

内容的提问来源于stack exchange,提问作者karhtik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:45:40