我正在尝试从SSIS中执行PowerShell脚本。我的脚本以Add-Type -Path "WinSCPnet.dll"
开头,并且出错了,因为它无法在PowerShell脚本所在的文件夹中找到WinSCP.exe
。来找出服务器管理员未将WinSCP安装到GAC中。这是我的问题吗?
如果是这样,如何使用WinSCP.exe
在脚本中引用$session.ExecutablePath
?任何帮助/方向将不胜感激。谢谢。
这是我的下面脚本:
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Declare variables
$date = Get-Date
$dateStr = $date.ToString("yyyyMMdd")
#$fileDirectory = "\\abicfs2\apps\CoverageVerifier\"
#$filePath = "\\abicfs2\apps\CoverageVerifier\cvgver." + $dateStr + ".0101"
$filePath = "\\empqaapp1\coverageverifier_scripts\CoverageVerifier\cvgver.20190121.0101"
# Write-Output $filePath
# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "secureftp.iso.com"
UserName = "account"
Password = "password"
SshHostKeyFingerprint = "ssh-rsa 2048 8C1lwAjxCNRF6B4kbPIeW52/GB+98FmLMt0AJNf/Sf4="
}
#$sessionOptions.AddRawSettings("FSProtocol", "2")
$session = New-Object WinSCP.Session
# $session.SessionLogPath = "\\share\apps\CoverageVerifier\UploadLog.log"
try
{
# Connect
$session.Open($sessionOptions)
# Transfer files
$session.PutFiles($filePath,"/").Check()
}
finally
{
$session.Dispose()
}
答案 0 :(得分:1)
我正在尝试从SSIS中执行Powershell脚本
似乎您认为您需要在GAC中具有WinSCP .NET程序集,以便可以从SSIS执行的PowerShell脚本中执行它。我认为这不是真的。仅在直接通过SSIS代码使用它时,才需要GAC中的程序集。这不是你的情况。
您可以简单地将WinSCPnet.dll
和WinSCP.exe
存储到PowerShell脚本目录中。
无论如何回答您的问题:
如果是这样,如何使用$ session.ExecutablePath在脚本中引用WinSCP.exe?
$session = New-Object WinSCP.Session
$session.ExecutablePath = "C:\path\WinSCP.exe"
(但如上所述,我认为您不需要它)
找出服务器管理员未将WinSCP安装到GAC中。
您无法将.exe文件安装到GAC。
答案 1 :(得分:0)
WinSCP程序集安装说明(https://winscp.net/eng/docs/library_install)的摘录:
该软件包包括程序集本身(winscpnet.dll)和一个 必需的依赖项,WinSCP可执行文件winscp.exe。
二进制文件相互影响,并且必须保持相同 装配体的文件夹。在极少数情况下,这不是 可能(例如,将组件安装到GAC时),请使用 Session.ExecutablePath属性可强制程序集查找 winscp.exe在其他位置。