无法从特定目录运行经nssm.exe注册为服务的.ps1脚本
问题排查与解决步骤
1. 本地系统账户的目录权限缺失
你自身拥有目录权限,但服务是以本地系统账户运行的,该账户可能未被授予目标目录的访问权限:
- 操作流程:右键
C:\Program Files\WindowsPowerShell\Modules\test→ 「属性」→ 「安全」→ 「编辑」→ 「添加」,输入NT AUTHORITY\SYSTEM,为其分配「读取&执行」「列出文件夹内容」「读取」权限(或直接给完全控制权限),应用设置后重启服务。
2. 含空格路径的命令解析错误
C:\Program Files路径包含空格,nssm调用PowerShell时若未正确包裹路径,会导致命令拆分失败:
- 正确的nssm配置命令示例:
注意:脚本路径需用双引号包裹,且在nssm的Arguments参数里要转义双引号(用nssm install TestService "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" nssm set TestService Arguments "-ExecutionPolicy Bypass -File `"C:\Program Files\WindowsPowerShell\Modules\test\yourscript.ps1`""")。
3. PowerShell执行策略限制
本地系统账户的执行策略可能比你的用户账户更严格,需显式绕过:
- 在服务的Arguments参数中必须添加
-ExecutionPolicy Bypass,确保脚本能被正常执行。
4. 脚本相对路径依赖失效
若脚本内使用了相对路径,移动到新目录后相对路径会指向错误位置,导致脚本执行失败进而触发服务暂停:
- 检查脚本内的所有路径,全部改为绝对路径;或在脚本开头添加工作目录设置:
Set-Location "C:\Program Files\WindowsPowerShell\Modules\test"
5. 启用nssm日志排查具体错误
通过配置nssm的日志输出,可直接查看服务启动失败的细节:
nssm set TestService AppStdout "C:\test\service_stdout.log" nssm set TestService AppStderr "C:\test\service_stderr.log"
启动服务后查看这两个日志文件,即可定位具体报错原因。
内容的提问来源于stack exchange,提问作者poseyj
相关产品推荐
相关产品推荐

