Проблема выполнения удаленного сценария PowerShell с использованием WinSCP через задание агента SQL Server - PullRequest
0 голосов
/ 28 января 2019

В SQL Server 2016 я настроил задание, которое выполняет сценарий powershell, который находится на удаленном сервере приложений.Когда я выполняю скрипт powershell через сервер приложений с помощью приложения Powershell ISE, мой сценарий работает без проблем.Когда я настроил задание и введите эту команду:

powershell.exe -ExecutionPolicy Bypass -file "\\ serverapp1 \ c $ \ coververifier_scripts \ SFTP_CoverageVerifier.ps1" в шаге 1.

КогдаЯ смотрю на ИСТОРИЮ ПРОСМОТРА. Я вижу ошибку ниже, но не могу понять, почему скрипт не может загрузить файл или сборку.

Буду признателен за любую помощь / направление.Вот ошибка:

Сценарий задания обнаружил следующие ошибки.Эти ошибки не остановили сценарий: шаг задания получил ошибку в строке 1 в сценарии PowerShell.Соответствующая строка - "powershell.exe -ExecutionPolicy Bypass -File" \ empqaapp1 \ c $ \ охватverifier_scripts \ SFTP_CoverageVerifier.ps1 "'.Исправьте сценарий и перенесите работу.Информация об ошибке, возвращаемая PowerShell: «Add-Type: не удалось загрузить файл или сборку»

Вот и мой сценарий powershell:

# Load WinSCP .NET assembly
#Add-Type -Path "WinSCPnet.dll" 
Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")

# Declare variables 
$date = Get-Date
$dateStr = $date.ToString("yyyyMMdd")

# Define $filePath
$filePath = "C:\coverageverifier_scripts\TEST_cvgver.20190121.0101"

# Write-Output $filePath

# Set up session options for VERISK TEST/ACCEPTANCE SFTP SERVER
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "secureftpa.iso.com"
    UserName = "account"
    Password = "pw"
    SshHostKeyFingerprint = "ssh-rsa 1111 xxx/xxxxxxxxx+3wuWNIkMY5GGgRObJisCPM9c9l7yw="
}

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

try
{
    # Connect
    $session.Open($sessionOptions)

    # Transfer files
    $session.PutFiles($filePath,"/").Check()
}
finally
{
    $session.Dispose()

1 Ответ

0 голосов
/ 28 января 2019

Ваш Add-Type вызов не включает путь к WinSCPnet.dll.

Если у вас WinSCPnet.dll в той же папке, что и ваш скрипт PowerShell, используйте этот синтаксис:

Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")

Или используйте полный путь.

См. Также Загрузка раздела в статье сборки WinSCP .NET об использовании WinSCP .NET Assembly из PowerShell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...