在通过SQL Server代理作业使用WinSCP执行REMOTE powershell脚本时出现问题

时间:2019-01-28 14:12:48

标签: sql-server powershell winscp-net

在SQL Server 2016上,我设置了一个作业,该作业执行驻留在远程应用程序服务器上的powershell脚本。当我使用Powershell ISE应用程序通过应用服务器执行powershell脚本时,我的脚本可以正常工作。当我完成作业并输入以下命令后:

在步骤1中,powershell.exe -ExecutionPolicy绕过-file“ \\ serverapp1 \ c $ \ coverageverifier_scripts \ SFTP_CoverageVerifier.ps1”。

当我查看“查看历史记录”时,看到以下错误,但是我无法弄清为什么脚本现在无法加载文件或程序集。

任何帮助/指导将不胜感激。这是错误:

  

作业脚本遇到以下错误。这些错误并未停止脚本:在PowerShell脚本中,作业步骤在第1行收到错误。相应的行是'powershell.exe -ExecutionPolicy Bypass -File“ \ empqaapp1 \ c $ \ coverageverifier_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 :(得分:0)

您的Add-Type呼叫不包括到WinSCPnet.dll的路径。

如果WinSCPnet.dll与PowerShell脚本位于同一文件夹中,请使用以下语法:

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

或使用完整路径。

另请参阅WinSCP .NET程序集文章中的Loading assembly部分,有关在PowerShell中使用WinSCP .NET程序集。