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 ...
随机推荐
- 机器学习服务活体检测算法荣获CFCA权威安全认证
随着人脸识别技术在金融.医疗等多个领域的加速落地,网络安全.信息泄露等问题愈为突出,用户对应用稳定性和安全性的要求也更为严格.为保障各行业高效稳定的开展业务,提前发现和应对潜在安全风险,HMS Cor ...
- MogDB企业应用 之 Rust驱动
引子 Rust 是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言.Rust 在语法上和类似 C++,但是设计者想要在保证性能的同时提供更好的内存安全. ...
- 第八篇:socket网络编程
一.网络编程简绍 二.socket连接过程 三.socket文件传输 四.socket循环接收 五.socket粘包处理 六.FTP文件传输 七.socketServer 八.web框架 #!/usr ...
- B端架构升级之路
一.背景 随着B端业务快速发展,系统愈趋复杂.我们发起了B端架构升级专项,基于B端业务的特点,从研发规范建设.B端架构基建.系统架构升级和落地保障等多方面提升了B端的架构水平. 二.升级思路 架构是一 ...
- 日志架构演进:从集中式到分布式的Kubernetes日志策略
当我们没有使用云原生方案部署应用时采用的日志方案往往是 ELK 技术栈. 这套技术方案比较成熟,稳定性也很高,所以几乎成为了当时的标配. 可是随着我们使用 kubernetes 步入云原生的时代后, ...
- 【笔记】go语言--字符与字符串处理
[笔记]go语言--字符与字符串处理 rune相当于go的char 使用range遍历pos,rune对(遍历出来是不连续的) 使用utf8.RuneCountInString获得字符数量 使用len ...
- 阿里云何万青:南坡VS北坡,阿里云高性能计算行业实践
简介:北坡模式:借助于云上大计算性能突破来提供HPC服务,切入的重点更加聚焦于云服务. 随着数字化转型的深入,行业应用对算力提出更高要求.为满足不同行业灵活的业务形态与计算需求,以云计算技术为服务模 ...
- CCO x Hologres:实时数仓高可用架构再次升级,双11大规模落地
简介:本文将会介绍今年是如何在去年基础上进行实时数仓高可用架构升级,并成功大规模落地双11. 作者 | 梅酱 来源 | 阿里技术公众号 一 2021年双11总结 2021年阿里巴巴双11期间,由CC ...
- [FE] Quasar 变通 loading 单纯使用遮罩效果的方法
Quasar 的 loading 组件是提供加载中的遮罩效果的. 如果你不想要 loading 的效果,只想保留遮罩效果,那么你可以通过 show() 方法的参数进行调整. 把 spinnerSize ...
- WPF 设置 IncludePackageReferencesDuringMarkupCompilation 属性导致分析器不工作
本文记录在 WPF 项目里面设置 IncludePackageReferencesDuringMarkupCompilation 属性为 False 导致了项目所安装的分析器不能符合预期工作 设置 I ...