theonlyone
Goto Top

PowerShell Script CITRIX disabled User Accounts

Hallo zusammen,

ich habe mir eine Augabe erstellt die meine aktuellen Fähigkeiten von Powershell übersteigt face-smile

Wir verwenden CITRIX mit vielen virtuellen Desktops, leider ist der Workflow beim Austritt eines Users nicht so sauber als das ich das mitbekomme.
Daher die Idee ein Script laufen zu lassen das mir von allen virtuellen Desktops die Usernamen in eine Variable schreibt und diese dann gegen die AD geprüft wird
ob der Useraccount deaktiviert ist.

$DeliveryController = "deliverycontroller.local"  
Add-PSSnapin Citrix*
$machines = Get-BrokerMachine -AdminAddress $DeliveryController | select {$_.AssociatedUserUPNs}

Damit hätte ich alle UPN´s der User in der Variable $machines

Nun kommt der Teil wo ich mir nicht sicher bin ob ich dafür die Variable verwenden kann.
Jetzt will ich die Namen gegen die AD prüfen und den Account State prüfen.
Wenn der Wert Enabled = false ist würde es bedeuten der User ist deaktiviert und ich würde darüber gerne eine Mail haben.
Mail Versand bekomme ich hin.

Search-ADAccount -AccountDisabled

Wie mache ich jetzt die Abfrage mit der Verwendung der Variable $machines?
Oder muss ich erst den Output von $machines in eine .txt oder .csv schreiben und dann wieder importieren?

Danke euch für die Hinweise

Content-Key: 424775

Url: https://administrator.de/contentid/424775

Printed on: April 25, 2024 at 00:04 o'clock

Member: SlainteMhath
SlainteMhath Mar 05, 2019 at 06:30:59 (UTC)
Goto Top
Moin,

schau dir mal dan PS "Befehl" foreach an...

lg,
Slainte
Member: emeriks
emeriks Mar 05, 2019 at 06:34:07 (UTC)
Goto Top
Hi,
Zitat von @SlainteMhath:
schau dir mal dan PS "Befehl" foreach an...
Warum die "" ?
Member: SlainteMhath
SlainteMhath Mar 05, 2019 at 06:38:01 (UTC)
Goto Top
Warum die "" ?
Weil's eigentlich kein Befehl ist, sondern ein Loop, Und dann nennt PS ja eh alles cmdlet ... also ich konnte mich nicht entscheiden und deswegen halt die " - ausserdem hatte ich heute noch keinen Kaffee :/
Member: erikro
erikro Mar 05, 2019 updated at 08:41:31 (UTC)
Goto Top
Moin,

ich würde es andersherum machen:

$disabled_users = search-adaccount -accountdisabled
$domain = $(get-addomain).dnsroot
foreach($user in $disabled_users) {

     $upn = "$user.samaccountname@$domain"  
     if($(get-brokermachine -adminaddress $DeliveryController --AssociatedUserUPN $upn)) {
                      
                       # Hier dann das, was passieren soll, wenn der User deaktiviert ist, aber noch in Citrix aktiv

    }

}

Ungetestet, da ich hier kein Citrix habe.

hth

Erik
Member: TheOnlyOne
TheOnlyOne Mar 05, 2019 at 09:43:03 (UTC)
Goto Top
danke @erikro
für den Anstoß.

Es wäre allerdings dann so das er die komplette AD nach deaktivierten Usern durchsucht. Bei rund 5000 AD Objekten ist es halt eine sehr lange laufzeit?

Daher war die Idee es anders herum zu machen.
Member: emeriks
emeriks Mar 05, 2019 at 10:58:54 (UTC)
Goto Top
Zitat von @TheOnlyOne:
Es wäre allerdings dann so das er die komplette AD nach deaktivierten Usern durchsucht.
Nein. Standardmäßig nur die aktuelle Domäne bzw. unterhalb von "SearchBase"
Erst wenn man als "Server" einen GC angibt, sucht er im gesamten AD.
Bei rund 5000 AD Objekten ist es halt eine sehr lange laufzeit?
Wieso? Was soll er denn in der zweiten Sekunde tun?
Bei uns dauert das bei >5000 Konten nur 2-3 Sekunden.
Member: erikro
erikro Mar 05, 2019 at 11:46:33 (UTC)
Goto Top
Moin,

Zitat von @emeriks:

Zitat von @TheOnlyOne:
Bei rund 5000 AD Objekten ist es halt eine sehr lange laufzeit?
Wieso? Was soll er denn in der zweiten Sekunde tun?
Bei uns dauert das bei >5000 Konten nur 2-3 Sekunden.

Das ist auch meine Erfahrung. Über die Laufzeit würde ich mir hier noch keine Sorgen machen. Ich schätze so wie @emeriks, dass das so zwei Sekunden dauert, bis das Ergebnis da ist.

Liebe Grüße

Erik