如何通过SMB从Linux远程执行Windows上的PowerShell脚本?
问题分析与解决方法
原命令错误原因
你用smbclient的-c参数传入Powershell -File run.ps1是错误的,因为smbclient的-c是执行smbclient自身的操作命令(比如上传、下载文件),不是把命令发送到远程Windows系统执行。这条命令会被Linux本地shell解析,而你的Linux环境里没有Powershell命令,所以报错Powershell: command not found。
正确实现方式
要从Linux远程执行Windows的PowerShell脚本,需要用专门的远程执行工具,比如impacket工具集里的psexec.py或wmiexec.py,步骤如下:
1. 先上传脚本到Windows的SMB共享目录
用smbclient把本地的run.ps1上传到Windows的共享目录(比如//hostname/Shared):
smbclient //hostname/Shared -U username%password -c "put run.ps1"
2. 远程执行脚本
方法一:使用psexec.py
psexec.py username:password@hostname "powershell -File C:\Shared\run.ps1"
(注意替换C:\Shared为共享目录对应的Windows本地路径,或者直接用网络路径:"powershell -File \\hostname\Shared\run.ps1")
方法二:使用wmiexec.py
wmiexec.py username:password@hostname "powershell -File C:\Shared\run.ps1"
3. 前置要求
- Linux系统需要安装
impacket工具集,可通过包管理器安装(比如Debian/Ubuntu:apt install python3-impacket)或pip安装:pip install impacket - Windows端需开启SMB服务,且共享目录对指定用户有读写权限
- Windows端PowerShell执行策略需允许运行脚本,可远程先执行:
psexec.py username:password@hostname "Set-ExecutionPolicy RemoteSigned -Force"(根据实际需求调整策略)
内容的提问来源于stack exchange,提问作者rocky
相关产品推荐
相关产品推荐

