2009-04-02 12 views
4

Ich habe eine Reihe von .NET-Assemblys (alle unter dem gleichen Verzeichnis) und einige davon enthalten Klassen, die eine abstrakte Klasse implementieren. Ich möchte, dass ein Powershell-Skript alle Klassen findet, die meine abstrakte Klasse implementieren, und für jede eine Methode ausführen.Reflexion mit Powershell

Hat jemand eine Idee, wie man das macht?

Danke!

Antwort

3

Hier ist eine kleine Funktion, die Sie .. ausprobieren wollen könnte (ich habe es noch nicht getestet, da ich dies mit leicht keine Kriterien zu testen ..)

Es kann durch Zuführung verwendet werden die Pfade in der Befehlszeile (ein oder mehr vollständige oder relative durch Kommata getrennt Pfade) wie diese

CheckForAbstractClassInheritance -Abstract System.Object -Assembly c:\assemblies\assemblytotest.dll, assemblytotest2.dll 

oder aus der Rohrleitung

'c:\assemblies\assemblytotest.dll','assemblytotest2.dll' | CheckForAbstractClassInheritance -Abstract System.Object 

oder mit Fileinfo-Objekten aus Get-Childitem (dir)

dir c:\assemblies *.dll | CheckForAbstractClassInheritance -Abstract System.Object 

Tweak nach Bedarf ..

function CheckForAbstractClassInheritance() 
{ 
    param ([string]$AbstractClassName, [string[]]$AssemblyPath = $null) 
    BEGIN 
    { 
     if ($AssemblyPath -ne $null) 
     { 
      $AssemblyPath | Load-AssemblyForReflection 
     } 
    } 
    PROCESS 
    { 
     if ($_ -ne $null) 
     { 
      if ($_ -is [FileInfo]) 
      { 
       $path = $_.fullname 
      } 
      else 
      { 
       $path = (resolve-path $_).path 
      } 
      $types = ([system.reflection.assembly]::ReflectionOnlyLoadFrom($path)).GetTypes() 
      foreach ($type in $types) 
      { 
       if ($type.IsSubClassOf($AbstractClassName)) 
       { 
        #If the type is a subclass of the requested type, 
        #write it to the pipeline 
        $type 
       } 
      } 

     } 
    } 
} 
+0

Die einzige hier Problem ist, dass Sie keine Klassen instanziieren oder Methoden von Baugruppen auszuführen, die nur für die Reflexion geladen wurden. – x0n