У мене є .NET збірка (dll), яка є API для резервного копіювання програмного забезпечення, яке ми використовуємо тут. Він містить деякі властивості та методи, якими я хотів би скористатися в моїх сценаріях Powershell. Однак у мене виникає безліч проблем із початком завантаження збірки, а потім використання будь-якого типу після завантаження збірки.
Повний шлях до файлу:
C:\rnd\CloudBerry.Backup.API.dll
У Powershell я використовую:
$dllpath = "C:\rnd\CloudBerry.Backup.API.dll"
Add-Type -Path $dllpath
Я отримую помилку нижче:
Add-Type : Unable to load one or more of the requested types. Retrieve the
LoaderExceptions property for more information.
At line:1 char:9
+ Add-Type <<<< -Path $dllpath
+ CategoryInfo : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
+ FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeComma
ndAdd-Type : Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
Використання того ж cmdlet на іншій збірці .NET, DotNetZip , який має приклади використання однакових функціональних можливостей на сайті, також не працює для мене.
Зрештою я виявляю, що я, здається, зможу завантажити збірку за допомогою відображення:
[System.Reflection.Assembly]::LoadFrom($dllpath)
Хоча я не розумію різниці між методами Load, LoadFrom або LoadFile, але останній метод, здається, працює.
Однак я все ще не можу створювати екземпляри або використовувати об’єкти. Кожен раз, коли я намагаюся, я отримую помилки, які описують, що Powershell не в змозі знайти жоден із загальнодоступних типів.
Я знаю, що заняття є:
$asm = [System.Reflection.Assembly]::LoadFrom($dllpath)
$cbbtypes = $asm.GetExportedTypes()
$cbbtypes | Get-Member -Static
---- початок витягу ----
TypeName: CloudBerryLab.Backup.API.BackupProvider
Name MemberType Definition
---- ---------- ----------
PlanChanged Event System.EventHandler`1[CloudBerryLab.Backup.API.Utils.ChangedEventArgs] PlanChanged(Sy...
PlanRemoved Event System.EventHandler`1[CloudBerryLab.Backup.API.Utils.PlanRemoveEventArgs] PlanRemoved...
CalculateFolderSize Method static long CalculateFolderSize()
Equals Method static bool Equals(System.Object objA, System.Object objB)
GetAccounts Method static CloudBerryLab.Backup.API.Account[], CloudBerry.Backup.API, Version=1.0.0.1, Cu...
GetBackupPlans Method static CloudBerryLab.Backup.API.BackupPlan[], CloudBerry.Backup.API, Version=1.0.0.1,...
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object objB)
SetProfilePath Method static System.Void SetProfilePath(string profilePath)
---- кінець витягу ----
Спроба використовувати статичні методи не вдалася, я не знаю чому !!!
[CloudBerryLab.Backup.API.BackupProvider]::GetAccounts()
Unable to find type [CloudBerryLab.Backup.API.BackupProvider]: make sure that the assembly containing this type is load
ed.
At line:1 char:42
+ [CloudBerryLab.Backup.API.BackupProvider] <<<< ::GetAccounts()
+ CategoryInfo : InvalidOperation: (CloudBerryLab.Backup.API.BackupProvider:String) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
Будь-яке керівництво оцінено !!