Kategorieauswahl

Objekt

Objekt Instanz in Java löschen

Objektinstanzen in Java können nicht gelöscht werden, darum kümmert sich die Garbagecollection. Wenn Sie dennoch bewusst ein Objekt löschen wollen können Sie das tun indem Sie dem Objekt den Wert null zuweisen und im Anschluß die Garbagecollection manuell ablaufen lassen.

public class Testauto
{
    static private int objcnt = 0;
    public Testauto()
    {
        ++objcnt;
    }
    public void finalize()
    {
        --objcnt;
    }
    public static void main(String[] args)
    {
        Testauto auto1;
        Testauto auto2 = new Testauto();
        Testauto auto3 = new Testauto();
        System.out.println(
                "Anzahl Testauto-Objecte: " + Testauto.objcnt
        );
        auto3=null;
        System.gc();
        System.out.println(
                "Anzahl Testauto-Objecte: " + Testauto.objcnt
        );
    }
}

In dem Script werden 3 Objektreferenzen auf die Klasse Testauto erstellt, aber nur 2 davon initialisiert Also entstehen zunächst einmal nur 2 Objekte. Das erste System.out.println bestätigt dies. Dann wird Auto3 genullt und in der nächsten Zeile der Garbagekollector angestoßen. Das nachfolgende System.out.println zeigt, dass nun, nur noch ein Objekt vorhanden ist.

Mit Powershell aus dem AD Objekte abholen und nach nicht leeren Eigenschaften filtern

Es gibt viele Scriptbeispiele um mit Powershell Objekte aus dem Active-Directory abzuholen, bei denen eine bestimmte Eigenschaft ausgefüllt ist, oder nicht. Allerdings habe ich noch kein Script gefunden, dass ein Objekt abholt und dann davon alle leeren oder ausgefüllten Felder anzeigt. Das Problem liegt im Rückgabe-Wert des AD-Objekts. Dieses ist nämlich als Hash aufgehängt und läßt somit einen einfachen Zugriff auf den Wert zu. Erst mit Hilfe der .NET-Methode GetEnumerator() ist es möglich den Inhalt auszuwerten wie das folgende Beispiel anhand von get-aduser zeigt:

(get-aduser Administrator -properties *).getenumerator() | ? {$_.value} # zeigt alle ausgefüllten Eigenschaften
(get-aduser Administrator -properties *).getenumerator() | ? {!$_.value} # zeigt alle nicht ausgefüllten Eigenschaften

COM Objecte in der Powershell

Powershell kann ja bekanntlich auf 3 Objektnamensräume zugreifen: WMI,.NET und COM.

Mit WMI ist das recht simpel:

get-wmiobject -list

gibt eine Liste mit allen in root\CimV2 (der Hautnamesraum – andere können Sie mit dem Parameter -namespace Namespacename natürlich auch abrufen) enthaltenen Klassen aus. Mit

$a=get-wmiobject win32_logicaldisk

z.B. können Sie sich dann die Logischen Datenträger in die Variable $a holen und mit einer Weiterleitung in Form von

$a | select *

herausfinden, wie die aktuellen Werte aussehen. Mit

$a | gm

sehen Sie natürlich auch die zur Verfügung stehenden Methoden.

Bei COM-Klassen ist dies nicht ganz so offensichtlich. Eine Auflistung der auf dem jeweiligen PC zur Verfügung stehenden COM-Klassen erhalten Sie mit:

ls REGISTRY::HKEY_CLASSES_ROOT\CLSID -include PROGID -recurse | foreach {$_.GetValue("")}

Das dauert ein Weilchen und hängt ab und zu ein bisschen, denn das sind nicht nur 2 ;-). Wenn Sie mögen können Sie sich auch dass natürlich gerne in eine Variable schreiben statt es auf dem Bildschirm auszugeben. Auch diese Objekte können Sie natürlich mit gm bzw get-member auseinandernehmen. Auf aktuellen Maschinen sollte dort z.B. auch SAPI.SpVoice zu finden sein. Mit

$sprecher=new-object -comobject SAPI.SpVoice
$sprecher.Speak('Good Morning')
kann Ihnen die liebe Anna einen zarten Weckruf ins Ohr flüstern. Sie können natürlich auch statt direkt Text (wie Good Morning) einzutippen auch einfach eine Variable in die Klammern schreiben ($sprecher.speak($vorzulesendertext)), welchen den vorzulesenden Text enthält. Auch hier werden Sie mit
$sprecher | gm

wieder herausfinden, dass Sie das Sprachtempo oder den Sprecher (z.B. einen der fließend Deutsch spricht, so wie Anna Englisch – lassen Sie Anna keinen deutschen Text vorlesen 😉 anpassen können. Leider habe ich noch nicht herausgefunden wo man Deutsche Sprecherprofile herbekommt. Ich kann mich nur dunkel erinnern, dass es unter Vista mal über die Updatefunktionen in Ultimate einen Stefan oder eine Steffi gab. Für einen Kommentar hierzu wäre ich dankbar.