从SSIS执行的PowerShell脚本中引用WinSCP.exe

时间:2019-01-23 13:38:54

标签: powershell ssis gac winscp winscp-net

我正在尝试从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()
}

2 个答案:

答案 0 :(得分:1)

  

我正在尝试从SSIS中执行Powershell脚本

似乎您认为您需要在GAC中具有WinSCP .NET程序集,以便可以从SSIS执行的PowerShell脚本中执行它。我认为这不是真的。仅在直接通过SSIS代码使用它时,才需要GAC中的程序集。这不是你的情况。

您可以简单地将WinSCPnet.dllWinSCP.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在其他位置。