C#的奇技淫巧:利用WinRM来远程操控其他服务器上的进程
- 确保远程服务器(服务端)已启用WinRM。在远程服务器上运行以下命令可以启用和配置WinRM:

- 确保执行远程命令的客户端和服务器之间的防火墙规则允许WinRM通信(默认使用端口5985和5986)。
- 本地客户端网络,需要设置为专用网络





1 public static void ExecuteRemoteCommand(string remoteComputer, string userName, string password, string command)
2 {
3 WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
4 connectionInfo.ComputerName = remoteComputer;
5 connectionInfo.Credential = new PSCredential(userName, ConvertToSecureString(password));
6
7 using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
8 {
9 runspace.Open();
10
11 using (PowerShell ps = PowerShell.Create())
12 {
13 ps.Runspace = runspace;
14 ps.AddScript(command);
15
16 Collection<PSObject> results = ps.Invoke();
17
18 foreach (var result in results)
19 {
20 Console.WriteLine(result);
21 }
22 }
23 runspace.Close();
24 }
25 }


public static void StopRemoteProcessByName(string remoteComputer, string userName, string password, string processName)
{
WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
connectionInfo.ComputerName = remoteComputer;
connectionInfo.Credential = new PSCredential(userName, ConvertToSecureString(password)); using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
runspace.Open(); using (PowerShell ps = PowerShell.Create())
{
// 获取进程ID
ps.Runspace = runspace;
ps.AddScript($"$proc = Get-Process -Name {processName}; if ($proc) {{$proc.Id}}"); // 执行并获取进程ID
var results = ps.Invoke();
if (ps.HadErrors)
{
Console.WriteLine("Error retrieving process ID");
return;
} // 如果找到了进程,关闭它
if (results.Count > 0)
{
int processId = (int)results[0].BaseObject;
ps.Commands.Clear();
ps.AddScript($"Stop-Process -Id {processId} -Force");
ps.Invoke(); if (ps.HadErrors)
{
Console.WriteLine("Error stopping process");
}
else
{
Console.WriteLine($"Process {processName} with ID {processId} stopped successfully.");
}
}
else
{
Console.WriteLine("No such process found.");
}
}
runspace.Close();
}
}



public static void StartRemoteProcess(string remoteComputer, string userName, string password, string processName)
{
WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
connectionInfo.ComputerName = remoteComputer;
connectionInfo.Credential = new PSCredential(userName, ConvertToSecureString(password)); using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
runspace.Open(); using (PowerShell ps = PowerShell.Create())
{
ps.Runspace = runspace;
ps.AddScript($"$process = Start-Process {processName} -PassThru; $process.Id"); var results = ps.Invoke();
if (ps.HadErrors)
{
Console.WriteLine("Error starting process");
}
else if (results.Count > 0)
{
Console.WriteLine($"Process started successfully. Process ID: {results[0]}");
}
} runspace.Close();
}
}
如果以上代码还不能满足你的好奇心,想要我本地测试的源码demo,可以在我的公众号【Dotnet Dancer】后台回复:【进程操控】 即可获取我的本地demo源码自行调试和把玩。
【备注】最近园子里面图片容易挂,如果挂掉了,可以查阅我发表其他地方的文章:https://mp.weixin.qq.com/s/-r9QQkvtBrTrReL5AQDNGQ
C#的奇技淫巧:利用WinRM来远程操控其他服务器上的进程的更多相关文章
- visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优
文/朱季谦 最近在做了一些JVM监控与调优的事情,算是第一次实践,还比较陌生,故而先把这一次经验简单记下笔记,这样,对后面学习调优方面时,不至于又想不起来了.本文档主要总结在window本地环境远程对 ...
- 远程编写+调试服务器上的Python程序
原帖参见(需自备梯子):https://webcache.googleusercontent.com/search?q=cache:1htdR2EXj5wJ:https://www.digitaloc ...
- 本地主机访问远程linux系统服务器上的jupyter notebook
1,机器情况:服务器 centos python环境已经配置好了,在虚拟环境下安装了anaconda 并且在里面安装了jupyter notebook 2,主机是 windows ipytho ...
- 使用Eclipse远程调试云服务器上的微信公众项目
云服务器系统:centos 7.3 如何在Eclipse上调试我们在云服务器上的项目呢,下面介绍一下步骤: 1.因为root账号不支持远程调试,首先需要在linux上创建一个新的用户,然后用该用户 ...
- PHP vscode+XDebug 远程断点调试服务器上的代码
对于简单的项目或仅仅想知道某一位置的某个变量是什么值,直接使用var_dump配置exit来打印和中断就可以了,方便又快捷, 而对于大型项目的调试,或想了解某个系统的整个运行过程,xdebug可能会是 ...
- java远程执行linux服务器上的shell脚本
业务场景:需要从服务器A中新增的文件同步至本地服务器,服务器A中内存有限,需同步成功之后清除文件. Java调用远程shell脚本,需要和远程服务器建立ssh链接,再调用指定的shell脚本. 1.创 ...
- (转发)Navicat 远程连接 Linux服务器上的MySQL数据库
授权法: 在安装mysql的机器上运行: 1.# ./bin/mysql -uroot -p //这样应该可以进入MySQL服务器 2.mysql> GRANT ALL PRIVILEGES O ...
- jconsole远程连接centos7 服务器上的tomcat来查看服务器状况(无密码版)
1.修改tomcat catalina.sh 代码解释:-Dcom.sun.management.jmxremote.port=6969 //连接端口,自定义不要与已有的端口冲突-Dcom.sun. ...
- WinRM服务远程命令执行
WinRM服务简介 WinRM是WindowsRemoteManagementd(win远程管理)的简称.基于Web服务管理(WS-Management)标准,使用80端口或者443端口.这样一来,我 ...
- SecureCRT远程ssh linux服务器,利用X11本地图形化wireshark抓包,
平时学习抓包,使用wireshark很方便,直接图形化界面抓包,近期项目中遇到了需要通过SecureCRT ssh到linux服务器上面,还要在抓包, 1.简单使用网络数据包截获分析工具tcpdump ...
随机推荐
- redis 简单整理——阻塞问题[二十五]
前言 简单介绍一下redis的阻塞问题. 正文 Redis是典型的单线程架构,所有的读写操作都是在一条主线程中完成 的.当Redis用于高并发场景时,这条线程就变成了它的生命线.如果出现 阻塞,哪怕是 ...
- WAF网站访问限制
请参考:https://www.cnblogs.com/yangyangblog/p/14930159.html 文件下载的地方可以网络搜索,这里提供IIS7 WINDOWS64位版本:https:/ ...
- 上架即封神!3.6k Star 的开源游戏模拟器,Delta 冲上 App Store 免费榜
一直以来,苹果设备的应用商店(App Store)都是禁止游戏模拟器上架,所以 iPhone/iPad 用户不能直接安装 GBA.红白机之类的模拟器应用,这也让想在 iPhone 上重温童年游戏机的机 ...
- 力扣626(MySQL)-换座位(中等)
题目: 表: Seat 编写SQL查询来交换每两个连续的学生的座位号.如果学生的数量是奇数,则最后一个学生的id不交换. 按 id 升序 返回结果表. 查询结果格式如下所示. 示例1: 解释: 请注意 ...
- 力扣385(java)-迷你语法分析器(中等)
题目: 给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger . 列表中的每个元素只可能是整数或整数嵌套列表 示例 1: 输入:s = &q ...
- 阿里 Seata 新版本终于解决了 TCC 模式的幂等、悬挂和空回滚问题
简介: 今天来聊一聊阿里巴巴 Seata 新版本(1.5.1)是怎么解决 TCC 模式下的幂等.悬挂和空回滚问题的. 作者:朱晋君 大家好,我是君哥. 今天来聊一聊阿里巴巴 Seata 新版本(1 ...
- 如何使用Arthas提高日常开发效率?
简介: 1. Arthas有什么功能,怎么用,请看:Arthas使用手册 2. Arthas命令比较复杂,一个帮助生成命令的IDEA插件:arthas idea plugin 使用文档 3. 基于Ar ...
- [Caddy2] Caddyfile 使用其它 DNS provider
安装 caddy 的 dns provider 模块. https://github.com/caddy-dns/cloudflare 如果是在 Docker 中 build 模块按文档进行,通过 c ...
- [Go] 结构体 嵌套 结构体指针 的含义
举个例子:以下 FutureKline 这个结构体 包含了 Kline 结构体的指针,为什么不直接是 Kline 结构体. type Kline struct { Pair CurrencyPair ...
- dotnet 读 WPF 源代码笔记 渲染层是如何将字符 GlyphRun 画出来的
从业务代码构建出来 GlyphRun 对象,在 WPF 的渲染层里,如何利用 GlyphRun 提供的数据将字符在界面呈现出来.本文将和大家聊聊从 WPF 的渲染层获取到 GlyphRun 数据,到调 ...