当前遇到的问题是,我正在努力让 WinSCP PowerShell 模块在 Azure Automation Runbook 中按预期工作。通过库安装,但 cmdlet 未正确显示。按照另一个线程的建议在脚本顶部手动安装。
Import-Module -Name WinSCP
然后我调用模块的代码失败了,但它默默地失败了,大约 30 秒后,整个 Runbook 重新开始!我试图让日志变得详细,并在日志中的代码末尾得到我得到的内容。
$SFTPSite = 'ftp IP address'
$SFTPDirectory = '/in/daily'
$LocalDirectory = $encryptedFilePath
$SessionLogFilePath = $encryptedFilePath + '\winscp.log'
$SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx"
$session = New-Object WinSCP.Session
$session.ExecutablePath = "C:\Modules\User\WinSCP\bin\WinSCP.exe"
$session.DebugLogPath = "$SessionLogFilePath"
$session.DebugLogLevel = "2"
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.HostName = $SFTPSite
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.UserName = "unremoved"
$sessionOptions.SecurePrivateKeyPassphrase = $sftpPassPhrase
$sessionOptions.SshPrivateKeyPath = "$privateKeyFilePath"
$sessionOptions.SshHostKeyFingerprint = $SshHostKeyFingerprint
Write-Output "SFTP session created"
gc $SessionLogFilePath
try {
$session.Open($sessionOptions)
Write-Output "SFTP session established"
$directory = $session.ListDirectory($SFTPDirectory)
foreach ($fileInfo in $directory.Files)
{
Write-Host ("$($fileInfo.Name) with size $($fileInfo.Length), " +
"permissions $($fileInfo.FilePermissions) and " +
"last modification at $($fileInfo.LastWriteTime)")
}
Write-Output "SFTP commands completed"
$session.Dispose()
Write-Output "SFTP session removed"
} catch {
Write-Host "Error: $session.Output"
gc $SessionLogFilePath
$session.Dispose()
}
我没有从中得到太多日志文件输出...
[2023-08-01 14:04:56.478] [0009] .NET Framework build
[2023-08-01 14:04:56.478] [0009] Executing assembly: WinSCPnet, Version=1.14.0.13736, Culture=neutral, PublicKeyToken=2271ec4a3c56d0bf
[2023-08-01 14:04:56.478] [0009] Executing assembly codebase: file:///C:/Modules/User/WinSCP/lib/net40/WinSCPnet.dll
[2023-08-01 14:04:56.478] [0009] Executing assembly location: C:\Modules\User\WinSCP\lib\net40\WinSCPnet.dll
[2023-08-01 14:04:56.478] [0009] Entry Assembly: Orchestrator.Sandbox, Version=7.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
[2023-08-01 14:04:56.478] [0009] Operating system: Microsoft Windows NT 6.2.9200.0
[2023-08-01 14:04:56.478] [0009] Bitness: 64-bit
[2023-08-01 14:04:56.478] [0009] Timezone: 00:00; Coordinated Universal Time
[2023-08-01 14:04:56.478] [0009] User: Administrator@CLIENT@CLIENT; Interactive: True
[2023-08-01 14:04:56.478] [0009] Runtime: 4.0.30319.42000
[2023-08-01 14:04:56.478] [0009] Console encoding: Input: Western European (Windows) (1252); Output: Western European (Windows) (1252)
[2023-08-01 14:04:56.478] [0009] Working directory: C:\Windows\System32
[2023-08-01 14:04:56.494] [0009] Assembly path: C:\Modules\User\WinSCP\lib\net40\WinSCPnet.dll
[2023-08-01 14:04:56.494] [0009] Assembly product version: 6.1.1.0
[2023-08-01 14:04:56.494] [0009] Entry assembly path: C:\Orchestrator\Orchestrator.Sandbox.exe
任何帮助将不胜感激!
WinSCP .NET 程序集 内部使用 WinSCP 可执行文件 (
winscp.exe
)。
Azure Runbook 不支持运行可执行文件:
自定义控制台应用程序可以在 Azure (PowerShell) Runbook 中执行吗?
不幸的是,您无法在 Azure Runbook 中使用 WinSCP .NET 程序集。
不过,您可以在 Azure Web 作业中使用 WinSCP .NET 程序集。