在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()
答案 0 :(得分:0)
您的Add-Type
呼叫不包括到WinSCPnet.dll
的路径。
如果WinSCPnet.dll
与PowerShell脚本位于同一文件夹中,请使用以下语法:
Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")
或使用完整路径。
另请参阅WinSCP .NET程序集文章中的Loading assembly部分,有关在PowerShell中使用WinSCP .NET程序集。