【问题标题】:How to run a WinSCP from ps1 file如何从 ps1 文件运行 WinSCP
【发布时间】:2018-10-17 09:58:41
【问题描述】:

我的脚本中有一个 .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"

【问题讨论】:

  • 你可以试试Start-Process cmd.exe -ArgumentList "/C", "C:\activatebatch.bat",看看是否可行。如果您希望 cmd 窗口快速完成,您可以将 /C 替换为 /K
  • 不,它不起作用。在 ps1 中是可以的,和以前一样,我留下了一个参数选项 /K 可用,但是任何 cmd 窗口都会显示,并且服务器上的文件没有被修改。
  • 定时任务是如何配置的?您不能将 .ps1 文件作为在那里执行的命令。您必须将powershell.exe 作为命令并将-File C:\path\to\your.ps1 作为命令的参数。此外,您可能应该调用Start-Process -Wait 或使用呼叫运算符而不是Start-Process
  • 但是 PowerShell 脚本中的其他所有内容(无论是什么)都有效吗?您收到任何错误消息吗?您是否在任务中使用“开始于”?它设置为什么?
  • WinSCP 有一个 .NET 库。你为什么不使用它而不是调用可执行文件?

标签: powershell batch-file winscp windows-task-scheduler


【解决方案1】:

如果您在批处理文件中有一个有效的 WinSCP 命令行,您可能需要做一些更改以使其与 PowerShell 兼容:

  • 批处理文件使用 ^(插入符号)转义新行。 PowerShell 使用 `(反引号)。因此,将插入符号替换为反引号。
  • 您显然需要转义任何在 PowerShell 中具有特殊含义的字符,尤其是 $(美元符号)、`(反引号)和 inner double quotes

在你的简单脚本中,只有第一点很重要,所以正确的命令是:

& "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 instead of winscp.exe 并添加/log switch to enable session logging 以进行调试。

也不推荐使用命令行参数打开会话。您应该使用open command(最好还指定一个协议前缀 - 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 其实可以generate a PowerShell - WinSCP command template for you.


虽然为了更好的控制,还是建议使用WinSCP .NET assembly from PowerShell

【讨论】:

  • 谢谢,现在它运行良好。如果我通过 Winscp.com 在 PowerShell 中执行它,不仅是从 .exe,我还可以登录 PowerShell 控制台。现在我将使用 .com 扩展名来使用 WinSCP。 Uff,现在我将修改 ps1 脚本以直接从自身发送,无需批处理文件。非常感谢你。你给我发了很好的解决方法。但在源代码中,主要问题很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 2021-09-16
相关资源
最近更新 更多