Linux Powershell在手动运行时能够传输文件,在设置为计划程序时无法传输

Linux Powershell在手动运行时能够传输文件,在设置为计划程序时无法传输,linux,powershell,job-scheduling,winscp,window-server,Linux,Powershell,Job Scheduling,Winscp,Window Server,如果手动执行,能够将文件传输到MFT服务器。 如果设置为作业计划程序,则无法将文件传输到MFT服务器。我的脚本是否有任何错误,或者我是否需要添加额外的凭据?试图找到文件传输的日志,但没有成功。我找不到它的日志 ####Load WinSCP .NET assembly Add-Type -Path "D:\Users\WinSCPnet.dll" -verbose $session = New-Object WinSCP.Session $session.SessionLogPath = "D

如果手动执行,能够将文件传输到MFT服务器。 如果设置为作业计划程序,则无法将文件传输到MFT服务器。我的脚本是否有任何错误,或者我是否需要添加额外的凭据?试图找到文件传输的日志,但没有成功。我找不到它的日志

####Load WinSCP .NET assembly
Add-Type -Path "D:\Users\WinSCPnet.dll" -verbose

$session = New-Object WinSCP.Session
$session.SessionLogPath = "D:\Users\SessionLog_$todayLogFile.log"
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.HostName = "[linux IP address]"
$sessionOptions.UserName = "[user name share between linux]"
$sessionOptions.PortNumber = "[port number of linux]"
$sessionOptions.Password = ""
$sessionOptions.SshPrivateKeyPath = "D:\Users\Private.ppk"
$sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 ......="
$sessionOptions.GiveUpSecurityAndAccepptAnySshHostKey = "true"

try 
{
    # Open the WinSCP.Session object using the WinSCP.SessionOptions object.
    #$session.SessionLogPath = "D:\Users\WinSCPtxt.log"
    $session.Open($sessionOptions)

    # Open WinSCP.TransferOptions
    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.FilePermissions = $Null # This is default
    $transferOptions.PreserveTimestamp = $False
    $transferFile = Get-ChildItem "D:\Users\*.zip" | Where-Object {($_.LastWriteTime -ge (Get-Date).AddDays(-1))}
    $destinationMFT = "/Outbox/"   

    # Upload
    $session.PutFiles( $transferFile, $destinationMFT , $False, $transferOptions).Check()

} 

#catch { Set-Content -Path 'D:\Users\result.log' $_.Exception.Message }

finally
{
    # Disconnect, clean up
    $session.Dispose()
}
软件:

  • Powershell v2.0
  • .NET4.0
  • 独立WinSCP(无安装权限)
  • Windows Server 2008
  • WinSCP 5.13.9。如果无法加载WinSCP.dll
  • 每天使用任务调度器运行

  • 调用作业调度程序的参数可能不正确,并且始终显示hit(0x1)

  • 启动一个程序> %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe

  • 参数>-NoProfile-NoLogo-NonInteractive-ExecutionPolicy 绕过-文件“\path\to\File.ps1”


  • 请参阅此处:

    已尝试。似乎没有捕获任何日志>抱歉。这里输入错误。“在实际中,脚本是正确的。@MartinPrikryl我已经标记了文件夹。因此,我现在可以完全访问该文件夹。现在,我抓挠我的头,为什么手动执行可以传输文件,但当设置任务调度程序不能传输文件。我读了你的另一篇文章,你怀疑“D:\Users*.zip”必须放“\\computername\Users*.zip”,我试过了,但似乎也不起作用。@MartinPrikryl手动执行将创建文件。但是没有在日志文件中写入日志。如果WinSCP在创建日志文件时遇到问题,
    $session.Open
    将引发异常,并且不会发生上载。我无法想象您能够获得所描述的行为(不是日志,而是上载成功)。除非您不关心安全性,否则不要使用
    giveupsecurity和dacceptanysshhostkey
    。更不用说它是
    giveupsecurity和dacce**p**tAnySshHostKey
    而不是
    giveupsecurity和dacce**pp**tAnySshHostKey
    -所以你答案中的代码永远不会起作用“如果您的MFT服务器不接受任何ssh主机密钥”完全没有意义。服务器不接受任何主机密钥。客户端接受服务器的主机密钥。如果您使用正确的语法,WinSCP当然可以接受任何主机密钥。好的,您已经删除了
    giveupsecurity和dacceptanysshhostkey
    ——但是现在我看不出您的答案实际上如何回答您的问题。@MartinPrikryl我没有对脚本做太多更改。我只是将参数更改为调用调度器-NoProfile-NoLogo-NonInteractive-ExecutionPolicy Bypass-File“\path\to\File.ps1”那么您能在回答中解释一下您到底更改了什么以及为什么它会有帮助吗?那么这就是
    -ExecutionPolicy Bypass
    ?所以你的脚本根本没有运行?与“转移”无关?