关于windows脚本的一些东西

server/2024/9/24 16:29:32/

我前几天碰到一个需求,需要在代码中实现将远程服务器中的文件拷贝到本地,在linux中很好实现,通过sshpass来实现用户名和密码的输入,并且通过scp来拷贝文件

sshpass -p hcsci123456 scp hcsci@192.168.50.50:~/GL01master.log ./

但是在windows环境下是不能执行sshpass的,于是我用到了pscp工具,在powershell中执行

pscp -pw ${password} -r ${username}@${remoteHost}:${remotePath} ${localPath}

将它整合为一个脚本文件就是

param([string]$localPath = "E:/test/" ,[string]$remoteHost
)$username = "hcsci"
$password = "1"
$remotePath = "/home/hcsci/TC384/base_map"$command = "pscp -pw ${password} -r ${username}@${remoteHost}:${remotePath} ${localPath}"
Invoke-Expression $command

在代码中调用这个脚本即可,demo如下:

//获取测试底图
bool PCRLightAccuracyWidget::getTestPhoto(const QString &path)
{//删除base_map文件夹QString deletePath = path + "/base_map";QDir dir(deletePath);if(dir.exists()){if(dir.removeRecursively()){qDebug() << "删除文件成功!" << deletePath;}else{qDebug() << "删除文件失败:" << deletePath;return false;}}else{qDebug() << "base_map不存在,不进行删除";}QProcess process;connect(&process, &QProcess::readyReadStandardOutput, this, [=](){QProcess *process = qobject_cast<QProcess *>(sender());if (process) {QString output = process->readAllStandardOutput();qDebug() << "Output:" << output;}});connect(&process, &QProcess::readyReadStandardError, this, [=](){QProcess *process = qobject_cast<QProcess *>(sender());if (process) {QString errorOutput = process->readAllStandardError();qDebug() << "Error Output:" << errorOutput;}});// 脚本路径QString scriptPath = QCoreApplication::applicationDirPath() + "/CopyFiles.ps1";// 准备参数QString ip;if(m_id == ENUM_CLASS::PCR_Id::M1){ip = "192.168.137.101";}else{ip = "192.168.137.102";}QStringList arguments;arguments << "-ExecutionPolicy" << "Bypass" << "-File" << scriptPath << path << ip;// 调用 PowerShell 执行脚本process.start("powershell", arguments);// 等待命令执行结束if(!process.waitForFinished(-1)){qDebug() << "执行获取测试底图脚本失败:" << process.errorString();return false;}QString output = process.readAllStandardOutput();QString errorOutput = process.readAllStandardError();qDebug() << "Output:" << output;if(!errorOutput.isEmpty()){qDebug() << "Error Output:" << errorOutput;return false;}return true;
}

但是在连接远程主机时,有时候会遇到一些问题,如:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:ruFzQrEzCAM+pmhyMANEyVCJAKry4tqvkoMHcNzWhk8. Please contact your system administrator. Add correct host key in C:\\Users\\HCSCI/.ssh/known_hosts to get rid of this message. Offending ECDSA key in C:\\Users\\HCSCI/.ssh/known_hosts:1 ECDSA host key for 192.168.137.101 has changed and you have requested strict checking. Host key verification failed.

解决方式如下:

1、known_hosts 文件中删除与 IP 地址 192.168.137.101 相关的密钥

ssh-keygen -R 192.168.137.101

之后再连接远程主机,若遇到交互输入,则输入yes

2、还有一种方法是将StrictHostKeyChecking改为no


http://www.ppmy.cn/server/48607.html

相关文章

面试杂谈之clickhouse

clickhouse 之前定时任务读取binlog 批量同步clickhouse kafka 批量给clickhouse灌数据 clickhouse列式数据库&#xff0c;运行时创建库表&#xff0c;加载数据查询数据压缩&#xff0c;磁盘存储&#xff0c;向量化引擎&#xff0c;利用CPU多核并行处理缺少完整的update/del…

为什么电容两端电压不能突变

我们先从RC延时电路说起吧&#xff0c;图1是最简单的RC延时电路&#xff0c;给一个阶跃的电压信号&#xff0c;电压会变成黄色曲线这个样子&#xff0c;这是为什么呢&#xff1f; 图1 电压跳变后&#xff0c;电源负极电子移动到电容下极板&#xff0c;排斥上极板电子流动到电源…

【Kadane】Leetcode 918. 环形子数组的最大和【中等】

环形子数组的最大和 给定一个长度为 n 的环形整数数组 nums &#xff0c;返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上&#xff0c; nums[i] 的下一个元素是 nums[(i 1) % n] &#xff0c;nums[i] 的前一个元素是 nums…

加入 Microsoft Build 2024 的 .NET 团队!

作者&#xff1a;Mehul Harry 排版&#xff1a;Alan Wang Microsoft Build 2024 为 .NET 爱好者带来了一系列精彩的会议。无论您是经验丰富的开发人员还是刚刚开始您的开发之旅&#xff0c;每个人都能找到适合自己的东西。 活动形式&#xff1a;混合体验 大会通过现场和在线会…

sublime如何写python

推荐一款好用且轻量级的编辑器——sublime—text3&#xff0c;sublime现在支持的语言有很多。 右边弹出的列表可以往下拉&#xff0c;亮点是支持了python&#xff0c;而且不需要安装任何的python环境&#xff0c;直接下载sublime就可以编写python代码并运行了。 使用方法&…

WPF框架,修改ComboBox控件背景色 ,为何如此困难?

直接修改Background属性不可行 修改控件背景颜色&#xff0c;很多人第一反应便是修改Background属性&#xff0c;但是修改过后便会发现&#xff0c;控件的颜色没有发生任何变化。 于是在网上搜索答案&#xff0c;便会发现一个异常尴尬的情况&#xff0c;要么就行代码简单但是并…

超详解——​深入理解Python中的位运算与常用内置函数/模块——基础篇

目录 ​编辑 1.位运算 2.常用内置函数/模块 math模块 random模块 decimal模块 常用内置函数 3.深入理解和应用 位运算的实际应用 1.权限管理 2.位图 3.图像处理 2.math模块的高级应用 统计计算 几何计算 总结 1.位运算 位运算是对整数在内存中的二进制表示进行…

adb卸载系统应用

1.进入shell adb shell2.查看所有包 pm list packages3.查找包 如查找vivo相关的包 pm list packages | grep vivo发现包太多了,根本不知道哪个是我们想卸载的应用 于是可以打开某应用,再查看当前运行应用的包名 如下: 4.查找当前前台运行的包名 打开某应用,在亮屏状态输入 …