Burada kullandığımız yazılımı yedeklemek için bir API olan bir .NET derlemesine (bir dll) sahibim. Powershell betiğim (ler )imde yararlanmak istediğim bazı özellikler ve yöntemler içeriyor. Bununla birlikte, ilk önce montajı yüklerken, ardından montaj yüklendikten sonra herhangi bir tip kullandığımda birçok sorunla karşılaşıyorum.
Tam dosya yolu:
C:\rnd\CloudBerry.Backup.API.dll
Powershell'de kullanıyorum:
$dllpath = "C:\rnd\CloudBerry.Backup.API.dll"
Add-Type -Path $dllpath
Aşağıdaki hatayı alıyorum:
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.
Aynı cmdlet'i başka bir .NET derlemesinde kullanmak, sitede aynı işlevi kullanmak için örneklere sahip olan DotNetZip de benim için çalışmıyor.
Sonunda yansıma kullanarak derleme yüklemek mümkün görünmektedir:
[System.Reflection.Assembly]::LoadFrom($dllpath)
Her ne kadar Load, LoadFrom veya LoadFile yöntemleri arasındaki farkı anlamadım, ancak bu son yöntem çalışıyor gibi görünüyor.
Ancak, hala örnekler oluşturamıyor veya nesneler kullanamıyor gibi görünüyor. Her denediğimde, Powershell'in herkese açık türlerden hiçbirini bulamadığını açıklayan hatalar alıyorum.
Sınıfların orada olduğunu biliyorum:
$asm = [System.Reflection.Assembly]::LoadFrom($dllpath)
$cbbtypes = $asm.GetExportedTypes()
$cbbtypes | Get-Member -Static
---- alıntı başlangıcı ----
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)
---- alıntıların sonu ----
Statik yöntemleri kullanmaya çalışmak başarısız, nedenini bilmiyorum !!!
[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
Herhangi bir rehberlik takdir !!