我的脚本中有一个.ps1文件。
在此脚本中,我有一行:

Start-Process "C:\activatebatch.bat"

如果我直接用ps1文件执行它,一切都会很好。但是,如果我将Windows Scheduler设置为ps1作为执行程序,则bat文件不会启动。在那个bat文件中,我有一个WinSCP,它将文件发送到服务器。

如何设置为从Windows Scheduler中存储的.ps1启动.bat?或者如何直接从PowerShell代码执行WinSCP?

我需要它来调用WinSCP将文件发送到服务器-并且选项存储在批处理文件中:

"C:\Program Files (x86)\WinSCP\WinSCP.exe" user:[email protected] /command ^
    "put C:\ss\file.txt /home/scripts/windows/" ^
    "exit"

最佳答案

如果批处理文件中有运行中的WinSCP命令行,则可能需要进行一些更改以使其与PowerShell兼容:

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

  • 在您的简单脚本中,只有第一点很重要,因此正确的命令是:
    & "C:\Program Files (x86)\WinSCP\WinSCP.exe" user:[email protected] /command `
        "put C:\ss\file.txt /home/scripts/windows/" `
        "exit"
    

    尽管我会进一步建议您使用 winscp.com instead of winscp.exe 并添加 /log switch to enable session logging进行调试。

    不建议使用命令行参数打开 session 。您应该使用 open command(最好还指定一个协议(protocol)前缀-sftp://吗?)。
    & "C:\Program Files (x86)\WinSCP\WinSCP.exe" /command `
        "open user:[email protected]" `
        "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

    关于powershell - 如何从PS1文件运行WinSCP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52852119/

    10-10 17:15