# 【自荐】基于PowerShell的Windows服务命令行管理器（WSM）

**URL:** <https://meta.appinn.net/t/topic/78965>\
**Category:** 发现频道\
**Tags:** windows, powershell\
**Created:** [2025 年12 月 17 日 23:22 UTC](https://meta.appinn.net/t/topic/78965 "2025-12-17T23:22:41Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jock](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/j/e68b1a/32.png) [@jock](https://meta.appinn.net/u/jock)\
**Post date:** [2025 年12 月 17 日 23:22 UTC](https://meta.appinn.net/t/topic/78965/1 "2025-12-17T23:22:41Z")

</div>

# Windows 服务管理（WSM）

WSM（Windows Service Manager）是一个基于 PowerShell + [NSSM](https://nssm.cc/) 的交互式命令行工具，用于统一管理 Windows 服务，尤其适合管理 **由 NSSM 托管的自定义服务** （EXE / BAT / JAR / Python 等）。

该工具提供完整的菜单界面，支持服务查看、启动、停止、重启、删除、编辑、主题切换以及 NSSM 的自动安装。

## 运行示例

 ![service_list](https://h2cdn.appinn.me/original/3X/0/5/05ce7621bb5c64c5cd6f8091837aaef7a73b8f48.png)

 ![service_manage](https://h2cdn.appinn.me/original/3X/c/1/c1d9fba5263c09020a8bb02d7915392584ae81fc.png)

* * *

## :sparkles: 功能特性

- 自动检测并管理 **NSSM 托管的服务**
- 管理通过 `services.txt` 添加的自定义服务
- 服务操作：
  - 启动 / 停止 / 重启
  - 删除（双重确认，防误操作）
  - 修改启动类型（Automatic / Manual / Disabled）

- 查看服务详细参数：
  - 程序路径
  - 启动参数
  - 工作目录

- 一键调用 **NSSM 官方 GUI** 编辑服务
- 自动检测并 **在线安装 NSSM**
- 可切换主题（支持自定义主题脚本）
- 自动管理员权限提升
- 适配中英文显示宽度，对齐友好

* * *

## 🧩 运行环境要求

- Windows 10 / 11
- PowerShell 5.1
- 管理员权限（脚本会自动请求）
- 可访问互联网（仅在下载 NSSM 时需要）

* * *

## 📁 目录结构说明

```plaintext
WSM.ps1 # 主程序
services.txt # 额外需要管理的服务列表
plugins/
 └─ Box.ps1 # 控制台 Box UI 插件
themes/
 ├─ xxx.ps1 # 主题文件
 └─ current_theme.txt # 当前主题记录文件（自动生成）

```

* * *

## :rocket: 使用方法

### 1️⃣ 运行脚本

首先关闭执行PowerShell 的脚本执行限制。

```auto
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass 

```

本脚本支持 **双击运行** 和 **PowerShell 命令行运行** 两种方式。

* * *

#### 方法一：双击运行（推荐）

1. 确保 `.ps1` 文件已关联到 `powershell.exe`
2. 直接双击 `WSM.ps1` 即可运行
3. 若未以管理员身份启动，脚本会自动请求并重新以管理员权限运行

**如何将 `.ps1` 文件关联到 PowerShell：**

- 右键任意 `.ps1` 文件 → **打开方式** → **选择其他应用**
- 选择 **Windows PowerShell**
- 勾选 **始终使用此应用打开 .ps1 文件**
- 点击 **确定**

> 如果列表中未显示 Windows PowerShell：  
> 点击“更多应用”，或手动选择以下路径：
> 
> `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`

* * *

#### 方法二：在 PowerShell 中运行

在 PowerShell 中执行：

```powershell

.\WSM.ps1

```

脚本会自动检测是否以管理员身份运行，若不是将自动重新启动。

* * *

### 2️⃣ 主菜单功能

- **服务列表** ：

- **添加新服务** ：

- **程序设置** ：

- **关于** ：  
显示程序信息、版本、NSSM 信息及功能说明

* * *

## 📄 services.txt 说明

`services.txt` 用于补充需要管理的服务。(使用nssm添加的服务会自动管理)

示例：

```plaintext
# 这里添加需要监控的服务
W32Time
MySQL

```

说明：

- 每行一个服务名（Service Name）
- 支持注释（`#` / `;` / `//`）
- 文件不存在时会自动创建

* * *

## 🎨 主题系统说明

- 所有主题文件位于 `themes` 目录
- 每个主题是一个 `.ps1` 文件
- 当前主题记录在 `current_theme.txt`
- 支持运行时切换，无需重启脚本

主题可配置项示例：

```powershell
# ==========================
# UI 主题配置说明
# ==========================
# $Global:UI 哈希表用于控制 WSM 菜单界面的样式和显示效果
# 可在运行时切换主题，支持修改颜色、边框样式、宽度等
# 字段说明：
# Width : 菜单/Box 宽度（字符数）
# BorderColor : 边框颜色
# BoxStyle : 边框样式（Double/Single/Heavy/Rounded/Ascii/Dotted）
# TitleColor : 菜单标题颜色
# TextColor : 列表文本颜色
# TextPaddingLeft : 文本左侧缩进空格数
# AccentColor : 高亮或强调文字颜色（还没用到）
# MutedColor : 辅助或提示文字颜色（如“返回”按钮、次要信息）
$Global:UI = @{
    Width = 50
    BorderColor = 'DarkGray'
    BoxStyle = 'Heavy'
    TitleColor = 'DarkYellow'
    TextColor = 'Cyan'
    TextPaddingLeft = 2
    AccentColor = 'DarkYellow'
    MutedColor = 'Gray'
}

```

* * *

## :gear: NSSM 支持说明

- 程序启动时自动检测程序所当前目录以及环境变量PATH中的 `nssm.exe`
- 未检测到时不会强制安装，仍可管理`services.txt`中添加的服务，但编辑功能和使用nssm添加服务功能无法使用
- 可在【设置】菜单中手动下载nssm安装
- 支持安装时加入系统 PATH

NSSM 官网：[nssm](https://nssm.cc)

* * *

## :warning: 注意事项

- 本工具 **必须以管理员权限运行**
- 删除服务操作不可恢复，请谨慎确认
- 编辑服务前请确认程序路径和参数正确
- 修改 PATH 会影响系统环境变量

* * *

## 📌 适用场景

- 将普通程序注册为 Windows 服务
- 管理 Java / Python / Node / 批处理 后台服务
- 运维或开发环境的服务统一管理
- 替代手动使用 `services.msc` 或 `sc.exe`

* * *

项目主页：

> **[GitHub - Zhu-junwei/wsm: WSM 是一个用管理 Windows 服务的命令行管理工具，提供标准化、可交互的服务运维入口。](https://github.com/Zhu-junwei/wsm)**
>
> WSM 是一个用管理 Windows 服务的命令行管理工具，提供标准化、可交互的服务运维入口。

---

<div class="post-metadata">

**Author:** ![eman](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/e/94ad74/32.png) [@eman](https://meta.appinn.net/u/eman)\
**Post date:** [2025 年12 月 18 日 01:24 UTC](https://meta.appinn.net/t/topic/78965/2 "2025-12-18T01:24:38Z")

</div>

支持一下，不过nssm打不开
