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

使用Python调用PsExec远程执行批处理脚本时遇权限拒绝错误

解决PsExec远程执行"Access is denied. 5"权限问题

你手动运行PsExec能正常工作,但通过Python的subprocess调用就触发权限拒绝,这种情况大多是因为脚本执行环境和手动操作的上下文存在差异,或者命令拼接有细节疏漏。下面是几个具体的排查和修复方向:

1. 修正命令拼接的细节问题

你当前的字符串拼接方式可能存在空格转义或路径解析的问题,建议用更稳妥的方式构造命令:

import subprocess

# 推荐用列表形式传递参数(避免shell=True的潜在风险)
cmd = [
    "psExec",
    "\\\\11.456.787.8",
    "-u", "user",
    "-p", "pwd",
    r"C:\basicfolder\run_1523448627.15.bat"
]
subprocess.call(cmd)

注意路径用原始字符串r""可以避免反斜杠转义的麻烦;如果一定要用shell=True,可以用shlex.quote()处理用户名和密码,防止特殊字符导致命令解析错误。

2. 检查Python进程的运行权限

你手动操作是在自己的用户会话里,但如果Python脚本是通过服务、任务计划或者非管理员身份运行,权限会和手动操作不一致:

  • 尝试右键点击Python脚本,选择以管理员身份运行,再执行看看是否解决问题。
  • 如果是在IDE中运行脚本,确保IDE也是以管理员身份启动的。

3. 确认目标服务器的PsExec权限配置

即使账号密码正确,PsExec也有几个关键权限要求:

  • 目标服务器必须开启Admin$共享(默认是开启的,但如果被禁用会直接导致权限拒绝)。
  • 你的账号需要加入目标服务器的本地管理员组,或者拥有远程执行进程的特定权限。
  • 检查目标服务器的Windows防火墙,确保开放了PsExec所需的445端口(默认用于SMB通信)。

4. 规避明文密码的安全风险

最后提个小建议:直接在代码里写明文密码是严重的安全隐患,建议用环境变量或者加密存储的方式传递密码,比如:

import os
import subprocess

pwd = os.getenv("REMOTE_SERVER_PASSWORD")
cmd = [
    "psExec",
    "\\\\11.456.787.8",
    "-u", "user",
    "-p", pwd,
    r"C:\basicfolder\run_1523448627.15.bat"
]
subprocess.call(cmd)

运行脚本前先设置好环境变量REMOTE_SERVER_PASSWORD即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:47