如何实现输入序号启停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 "操作失败:$_" }
关键说明
- 数组存储服务列表:用
Get-Content将文件内容读取为数组,每个元素对应一个服务显示名称,方便通过索引快速定位。 - 输入验证:确保用户输入的是有效数字且在序号范围内,避免无效输入导致脚本报错。
- 服务对象匹配:因为文件中存储的是服务显示名称(如
Print Spooler),而非系统识别的服务名(如Spooler),所以必须用Get-Service -DisplayName获取服务对象后再执行启停操作,这是之前脚本失效的核心原因。 - 错误捕获:加入
try/catch和-ErrorAction Stop,可以捕获服务不存在、权限不足等异常并给出明确提示。
内容的提问来源于stack exchange,提问作者karhtik
相关产品推荐
相关产品推荐

