syntax1001
Goto Top

AD User Properties per CMD Befehl öffnen ?

Hallo Zusammen,

ich arbeite derzeit an einem PowerShell-Script (GUI), um AD User zu verwalten (anlegen, löschen, ändern). Dazu habe ich eine ListBox erstellt in der alle vorhandenen User einer zuvor ausgewählten OU (per ComboBox) angezeigt werden.

Wenn ich nun einen User "ändern" möchte, per klick auf den dazugehörigen Button, würde ich gerne das Fenster der User Eigenschaften öffnen lassen. Sprich, statt Rechtsklick --> Eigenschaften auf den entsprechenden User im AD Benutzer & Computer Verwaltungstool, will ich dieses Fenster per Button Aktion aufrufen um die User Eigenschaften zu ändern.

Gibt es da eine Möglichkeit ? Ich habe da an so eine Art sysdm.cpl Befehl gedacht den ich in der Button Click Aktion hinterlegen kann. Google konnte mir da bis jetzt leider keine Auskunft geben, ob so etwas überhaupt möglich ist.

Mit einem alternativen Lösungsvorschlag gebe ich mich natürlich auch zufrieden.. face-wink


Mfg

rOMOP11

Content-Key: 399997

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

Printed on: April 24, 2024 at 07:04 o'clock

Member: emeriks
emeriks Jan 31, 2019 at 10:19:09 (UTC)
Goto Top
Member: colinardo
Solution colinardo Feb 03, 2019 updated at 15:18:22 (UTC)
Goto Top
Servus,
Wenn ich nun einen User "ändern" möchte, per klick auf den dazugehörigen Button, würde ich gerne das Fenster der User Eigenschaften öffnen lassen
Machen kann man das, wenn auch nicht gerade schön, da das MMC20 Com-Object sich unter der PS etwas zickig verhält.
function Show-ADUCObjectPropertySheet{
    param(
        [parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][ValidateScript({[ADSI]"LDAP://$_"})]$distinguishedName  
    )
     
    # extract CN, OU, Domain od User
    $m = [regex]::match($distinguishedName,'^CN=(.*?),(OU|CN)=(.*?)(?=,DC),DC=(.*)$')  
    $strCN = $m.Groups[1].Value
    $arrOU = $m.Groups[3].Value -split ',(?:OU|CN)='  
    $strDomain = $m.Groups[4].Value -replace ',DC=','.'  
    # prepare mmc
    $mmc = [System.Activator]::CreateInstance([type]::GetTypeFromProgID('MMC20.Application'))  
    # load dsa.msc (ADUC)
    $mmc.Load("dsa.msc")  
    # assign Document, View and Scope variables
    $doc = $mmc.Document
    $view = $doc.ActiveView
    $ns = $doc.ScopeNamespace
    # get root of doc
    $n = $ns.GetRoot()
    # get first child of Root = ADUC Node
    $n = $ns.GetChild($n)
    # get first Child of ADUC-Node
    $n = $ns.GetChild($n)
    # search matching domain node
    while($n.Name -ne $strDomain){
        $n = $ns.GetNext($n)
    }
    # get first child of found domain node
    $n = $ns.GetChild($n)
    # traverse the OUs
    ($arrOU.Count-1)..0 | %{
        while($n.Name -ne $arrOU[$_]){
            $n = $ns.GetNext($n)
        }
        if ($_ -gt 0){
            $n = $ns.GetChild($n)
        }
    }
    # expand OU
    $view.ActiveScopeNode = $n
    $ns.Expand($n)
    # select found object
    $view.ListItems | ?{$_.Name -eq $strCN} | %{$view.Select($_)}
    # show property sheet of selected object
    $view.DisplaySelectionPropertySheet()
    # user can interact with mmc
    $mmc.UserControl = 1
    # show mmc
    $mmc.Show()
}

Get-ADuser Administrator | Show-ADUCObjectPropertySheet
Wenn du schon eine GUI baust bau dir den Dialog doch nach oder zumindest die wichtigsten und speichere diese dann mit Set-ADUser selbst, lernst du eine Menge über Error-Handling und LDAP-Attribute face-wink.

Grüße Uwe
Member: SYNTAX1001
SYNTAX1001 Feb 05, 2019 at 09:05:09 (UTC)
Goto Top
Super, vielen Dank! face-smile