powershell - 如何从 ps1 文件运行 WinSCP
问题描述
我的脚本有一个 .ps1 文件。在这个脚本中,我有一行:
Start-Process "C:\activatebatch.bat"
如果我直接用 ps1 文件执行它,一切正常。但是,如果我设置一个以 ps1 作为执行程序的 Windows 调度程序,bat 文件不会启动。在那个 bat 文件中,我有一个将文件发送到服务器的 WinSCP。
如何将其设置为从存储在 Windows 调度程序中的 .ps1 启动 .bat?或者我如何直接从 PowerShell 代码执行 WinSCP?
我需要它来调用 WinSCP 将文件发送到服务器 - 并且选项存储在批处理文件中:
"C:\Program Files (x86)\WinSCP\WinSCP.exe" user:password@IPI.PIP.IP.IP /command ^
"put C:\ss\file.txt /home/scripts/windows/" ^
"exit"
解决方案
如果您在批处理文件中有一个有效的 WinSCP 命令行,您可能需要做一些更改以使其与 PowerShell 兼容:
- 批处理文件使用 ^(插入符号)转义新行。PowerShell 使用 `(反引号)。因此,将插入符号替换为反引号。
- 你显然需要在 PowerShell 中转义任何具有特殊含义的字符,特别是 $(美元符号)、`(反引号)和内部双引号。
在您的简单脚本中,只有第一点很重要,因此正确的命令是:
& "C:\Program Files (x86)\WinSCP\WinSCP.exe" user:password@IPI.PIP.IP.IP /command `
"put C:\ss\file.txt /home/scripts/windows/" `
"exit"
尽管我进一步建议您使用winscp.com
而不是winscp.exe
添加/log
开关来启用会话日志记录以进行调试。
也不推荐使用命令行参数打开会话。您应该使用open
命令(最好还指定一个协议前缀 - sftp://
?)。
& "C:\Program Files (x86)\WinSCP\WinSCP.exe" /command `
"open user:password@IPI.PIP.IP.IP" `
"put C:\ss\file.txt /home/scripts/windows/" `
"exit"
WinSCP 5.14 beta 实际上可以为您生成一个 PowerShell-WinSCP 命令模板。
尽管为了更好的控制,建议使用来自 PowerShell 的 WinSCP .NET 程序集。
推荐阅读
- node.js - 当我尝试将 PDF 保存在磁盘上时,Puppeteer 不渲染颜色、背景颜色
- angular - 在 Angular 9 应用程序中同时使用 AOT 和 JIT
- java - 如何删除实体列表
- c# - 以 json 形式返回部分视图?
- laravel - 使用数据表按 asc/desc 顺序排列表列
- android - 摆脱 android 虚拟键盘上的填充(颤振)
- react-navigation - 离开屏幕时,React 导航自定义标题不会消失(仅限 iOS)
- html - json 对象不影响查看
- c# - 基于身份服务器 4 中的用户登录访问重定向到客户端?
- python - 我的 postgresql 数据库没有显示多对多字段列,但 django 管理页面显示。为什么?