我正在尝试将C#类型添加到PowerShell,如下所示:
Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll")
我收到以下错误:
Add-Type : Cannot bind parameter 'Path' to the target. Exception setting "Path": "Cannot find path 'D:\Source\Repos\....\TestDataAccess\WinSCPnet.dll' because it does not exist." At D:\Source\Repos\....\TestDataAccess\WinSCPFiles.ps1:8 char:16 + Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (:) [Add-Type], ParameterBindingException + FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.AddTypeCommand
答案 0 :(得分:1)
您是否遵循了供应商/作者提供的所有说明/选项。
https://winscp.net/eng/docs/library_powershell
加载程序集
PowerShell脚本需要加载程序集才能使用程序集公开的类。要加载程序集,请使用Add-Type cmdlet.4)
Add-Type -Path "WinSCPnet.dll"
如果您需要从其他目录运行脚本,则需要指定程序集的完整路径。您可以使用$ PSScriptRoot自动变量从脚本文件路径派生路径:5)
Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")
如果您正在编写计划用作WinSCP扩展(自定义命令)的脚本,则可以使用随WinSCP一起安装的程序集的副本。在这种情况下,您可以使用WINSCP_PATH环境变量来解析程序集的路径。要允许脚本甚至在WinSCP之外运行,如果未定义变量,您应该回退到$ PSScriptRoot方法(如上所述):
$assemblyPath = if ($env:WINSCP_PATH) { $env:WINSCP_PATH } else { $PSScriptRoot }
Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll")