Ссылка на WinSCP.exe из сценария PowerShell, выполняемого из SSIS

Я пытаюсь выполнить сценарий PowerShell из SSIS. Мой скрипт начинается с Add-Type -Path "WinSCPnet.dll" и выдает ошибку, потому что не может найти WinSCP.exe в папке, в которой находится мой скрипт PowerShell. Приходите, чтобы узнать, что администратор сервера НЕ устанавливал 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()
}

person Melinda    schedule 23.01.2019    source источник


Ответы (2)


Я пытаюсь выполнить сценарий Powershell из SSIS.

Кажется, вы считаете, что вам нужна сборка WinSCP .NET в GAC, чтобы вы могли выполнять ее из сценария PowerShell, выполняемого из SSIS. Я не думаю, что это правда. Вам нужна сборка в GAC, только если вы используете ее напрямую из кода SSIS. Чем не ваш случай.

Вы можете просто сохранить WinSCPnet.dll и WinSCP.exe в каталоге сценариев PowerShell.


В любом случае, чтобы ответить на ваш вопрос:

Если да, то как и где я могу сослаться на WinSCP.exe в своем сценарии, используя $session.ExecutablePath?

$session = New-Object WinSCP.Session 
$session.ExecutablePath = "C:\path\WinSCP.exe"

(но, как указано выше, я не думаю, что вам это нужно)


Приходите, чтобы узнать, что администратор сервера НЕ устанавливал WinSCP в GAC.

Вы не можете установить файл .exe в GAC.

person Martin Prikryl    schedule 23.01.2019
comment
Спасибо, Мартин. Мне нужна сборка, установленная в GAC, потому что я буду выполнять свой сценарий powershell через SSIS. - person Melinda; 24.01.2019
comment
Опять же, я не думаю, что это правда, как я уже писал в своем ответе. Но я не могу попробовать прямо сейчас, чтобы быть уверенным. - person Martin Prikryl; 25.01.2019

Выдержка из инструкции по установке сборки WinSCP (https://winscp.net/eng/docs/library_install ):

Пакет включает в себя саму сборку (winscpnet.dll) и необходимую зависимость, исполняемый файл WinSCP winscp.exe.

Бинарные файлы взаимодействуют друг с другом и должны храниться в одной папке, чтобы сборка работала. В редких случаях это невозможно (например, при установке сборки в GAC), используйте свойство Session.ExecutablePath, чтобы заставить сборку искать winscp.exe в другом месте.

person montonero    schedule 23.01.2019