dispatcher
Goto Top

Active Directory Picker - Get-ADGroup kann nicht in den Typ konvertiert werden

Mahlzeit zusammen,

Im folgenden Skript erhalte ich immer die Meldung:

Get-ADGroup : "System.Object" kann nicht in den Typ "Microsoft.ActiveDirectory.Management.ADGroup" konvertiert
werden, der für den Parameter "Identity" erforderlich ist. Die angegebene Methode wird nicht unterstützt.

Anscheinend kann der AD Picker die Auswahl nicht weitergeben und bricht immer ab. Wo genau liegt der Fehler? Welche Properties muss ich denn übergeben?

Function ADPicker 
{
Add-Type -Path (Join-Path -Path (Split-Path $script:MyInvocation.MyCommand.Path) -ChildPath 'bin\CubicOrange.Windows.Forms.ActiveDirectory.dll')  
$DialogPicker = New-Object CubicOrange.Windows.Forms.ActiveDirectory.DirectoryObjectPickerDialog
$DialogPicker.AllowedLocations = [CubicOrange.Windows.Forms.ActiveDirectory.Locations]::All
$DialogPicker.AllowedObjectTypes = [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Groups,[CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Users,[CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Computers
$DialogPicker.DefaultLocations = [CubicOrange.Windows.Forms.ActiveDirectory.Locations]::JoinedDomain
$DialogPicker.DefaultObjectTypes = [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Groups
$DialogPicker.ShowAdvancedView = $false
$DialogPicker.MultiSelect = $true
$DialogPicker.SkipDomainControllerCheck = $true
$DialogPicker.Providers = [CubicOrange.Windows.Forms.ActiveDirectory.ADsPathsProviders]::Default

$DialogPicker.AttributesToFetch.Add('samAccountName')  
$DialogPicker.AttributesToFetch.Add('title')  
$DialogPicker.AttributesToFetch.Add('department')  
$DialogPicker.AttributesToFetch.Add('distinguishedName')  
$DialogPicker.AttributesToFetch.Add('Identity')  
$DialogPicker.AttributesToFetch.Add('objectSid')  
$DialogPicker.AttributesToFetch.Add('DisplayName')  
$DialogPicker.ShowDialog()
return $DialogPicker.Selectedobject
}
$AD = ADPicker

Function Get-Folder($initialDirectory)
{
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null  
    $Ordnername = New-Object System.Windows.Forms.FolderBrowserDialog
    $Ordnername.Description = "Ordner auswählen"  
    $Ordnername.rootfolder = "MyComputer"  
    if($Ordnername.ShowDialog() -eq "OK")  
    {
        $Ordner += $Ordnername.SelectedPath
    }
    return $Ordner
}
$o = Get-Folder

function Get-FolderRightsForAccount([string]$dn, [string]$rootfolder, [switch]$includeInheritedRights){
    $sids = @()
    $sids += (Get-ADObject $dn -Properties Name).Name.Value
    $sids += Get-ADPrincipalGroupMembership $dn | select -Expand Name
    $inherited = @{$true=($true,$false);$false=$false}[$includeInheritedRights.IsPresent]
    (Get-ACL $rootfolder).Access | ?{try{$_.NameReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={$rootfolder}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
    gci $rootfolder -Recurse -Directory -PipelineVariable f | %{
        (Get-ACL $_.Fullname).Access | ?{try{$_.NameReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={$f.Fullname}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
    }
}

Get-FolderRightsForAccount -dn (Get-ADGroup $AD).Name -rootfolder $o -includeInheritedRights | ft -AutoSize 

Content-Key: 517545

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

Ausgedruckt am: 19.03.2024 um 09:03 Uhr

Mitglied: emeriks
emeriks 21.11.2019 um 13:04:26 Uhr
Goto Top
Lass Dir doch einfach mal in Zeile 25 ausgeben
$AD | FL
Mitglied: dispatcher
dispatcher 21.11.2019 aktualisiert um 14:11:58 Uhr
Goto Top
Da kann ich gerade nichts mit anfangen, weil er mir dann ewig viele Fehlermeldungen ausspuckt.

Split-Path : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.  
In Zeile:3 Zeichen:45
+ ... in-Path -Path (Split-Path $script:MyInvocation.MyCommand.Path) -Child ...
+                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Split-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SplitPathCommand
 
New-Object : Der Typ [CubicOrange.Windows.Forms.ActiveDirectory.DirectoryObjectPickerDialog] kann nicht gefunden werden. Stellen Sie sicher, dass die Assembly, die diesen Typ enthält, geladen wird.
In Zeile:4 Zeichen:17
+ ... logPicker = New-Object CubicOrange.Windows.Forms.ActiveDirectory.Dire ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
 
Der Typ [CubicOrange.Windows.Forms.ActiveDirectory.Locations] wurde nicht gefunden.
In Zeile:5 Zeichen:34
+ ... Locations = [CubicOrange.Windows.Forms.ActiveDirectory.Locations]::Al ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (CubicOrange.Win...ctory.Locations:TypeName) , RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
 
Der Typ [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes] wurde nicht gefunden.
In Zeile:6 Zeichen:36
+ ... jectTypes = [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]:: ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (CubicOrange.Win...ory.ObjectTypes:TypeName) , RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
 
Der Typ [CubicOrange.Windows.Forms.ActiveDirectory.Locations] wurde nicht gefunden.
In Zeile:7 Zeichen:34
+ ... Locations = [CubicOrange.Windows.Forms.ActiveDirectory.Locations]::Jo ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (CubicOrange.Win...ctory.Locations:TypeName) , RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
 
Der Typ [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes] wurde nicht gefunden.
In Zeile:8 Zeichen:36
+ ... jectTypes = [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]:: ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (CubicOrange.Win...ory.ObjectTypes:TypeName) , RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
 
Die Eigenschaft "ShowAdvancedView" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass die Eigenschaft vorhanden ist und festgelegt werden kann.  
In Zeile:9 Zeichen:1
+ $DialogPicker.ShowAdvancedView = $false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Die Eigenschaft "MultiSelect" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass die Eigenschaft vorhanden ist und festgelegt werden kann.  
In Zeile:10 Zeichen:1
+ $DialogPicker.MultiSelect = $true
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Die Eigenschaft "SkipDomainControllerCheck" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass die Eigenschaft vorhanden ist und festgelegt werden kann.  
In Zeile:11 Zeichen:1
+ $DialogPicker.SkipDomainControllerCheck = $true
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
Der Typ [CubicOrange.Windows.Forms.ActiveDirectory.ADsPathsProviders] wurde nicht gefunden.
In Zeile:12 Zeichen:27
+ ... Providers = [CubicOrange.Windows.Forms.ActiveDirectory.ADsPathsProvid ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (CubicOrange.Win...sPathsProviders:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:14 Zeichen:1
+ $DialogPicker.AttributesToFetch.Add('samAccountName')  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:15 Zeichen:1
+ $DialogPicker.AttributesToFetch.Add('title')  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:16 Zeichen:1
+ $DialogPicker.AttributesToFetch.Add('department')  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:17 Zeichen:1
+ $DialogPicker.ShowDialog()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 

Get-ADGroup : Das Argument für den Parameter "Identity" kann nicht überprüft werden. Das Argument ist NULL. Geben Sie einen gültigen Wert für das Argument an, und führen Sie den Befehl erneut aus.  
In Zeile:53 Zeichen:45
+ Get-FolderRightsForAccount -dn (Get-ADGroup $AD).Name -rootfolder $o  ...
+                                             ~~~
    + CategoryInfo          : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup
Mitglied: emeriks
emeriks 21.11.2019 um 14:14:35 Uhr
Goto Top
???
Anders:
Deaktiviere Zeile 51 und nimm als Zeile 52 rein
$AD | FL
Dann siehst Du, was in $AD drin ist.

Auch
$AD.GetType()
Mitglied: dispatcher
dispatcher 21.11.2019 aktualisiert um 14:39:44 Uhr
Goto Top
Ausgabe ist wie folgt:

Path : jeweilige Object DN
SchemaClassName : group
Name : der ausgewählte Gruppenname
Upn : ist leer
FetchedAttributes :

Ich bin aber der Meinung über die Funktion Get-FolderRightsForAccount die Properties Name richtig mitzugeben
Mitglied: emeriks
emeriks 21.11.2019 um 15:01:48 Uhr
Goto Top
Na dann noch
$AD.FetchedAttributes  | FL
Da ist dann bestimmt der distinguishedName bei, so wie von Dir in Zeile 17 angefordert. Diesen kannst Du dann beim Get-ADGroup verwenden.
Mitglied: dispatcher
dispatcher 21.11.2019 um 15:20:41 Uhr
Goto Top
Das hatte ich auch schon probiert. Auch über den Filter distinguishedName, der gleiche Fehler face-sad
Function ADPicker 
{
Add-Type -Path (Join-Path -Path (Split-Path $script:MyInvocation.MyCommand.Path) -ChildPath 'bin\CubicOrange.Windows.Forms.ActiveDirectory.dll')  

$DialogPicker = New-Object CubicOrange.Windows.Forms.ActiveDirectory.DirectoryObjectPickerDialog

$DialogPicker.AllowedLocations = [CubicOrange.Windows.Forms.ActiveDirectory.Locations]::All
$DialogPicker.AllowedObjectTypes = [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Groups,[CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Users,[CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Computers
$DialogPicker.DefaultLocations = [CubicOrange.Windows.Forms.ActiveDirectory.Locations]::JoinedDomain
$DialogPicker.DefaultObjectTypes = [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Groups
$DialogPicker.ShowAdvancedView = $false
$DialogPicker.MultiSelect = $true
$DialogPicker.SkipDomainControllerCheck = $true
$DialogPicker.Providers = [CubicOrange.Windows.Forms.ActiveDirectory.ADsPathsProviders]::Default

$DialogPicker.AttributesToFetch.Add('samAccountName')  
$DialogPicker.AttributesToFetch.Add('title')  
$DialogPicker.AttributesToFetch.Add('department')  
$DialogPicker.AttributesToFetch.Add('distinguishedName')  

$DialogPicker.ShowDialog()

return $DialogPicker.Selectedobject
}
$AD = ADPicker



Function Get-Folder($initialDirectory)
{
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null  
    $Ordnername = New-Object System.Windows.Forms.FolderBrowserDialog
    $Ordnername.Description = "Ordner auswählen"  
    $Ordnername.rootfolder = "MyComputer"  
    if($Ordnername.ShowDialog() -eq "OK")  
    {
        $Ordner += $Ordnername.SelectedPath
    }
    return $Ordner
}
$o = Get-Folder


function Get-FolderRightsForAccount([string]$dn, [string]$rootfolder, [switch]$includeInheritedRights){
    $sids = @()
    $sids += (Get-ADObject $dn -Properties distinguishedName).distinguishedName.Value
    $sids += Get-ADPrincipalGroupMembership $dn | select -Expand GroupName
    $inherited = @{$true=($true,$false);$false=$false}[$includeInheritedRights.IsPresent]
    (Get-ACL $rootfolder).Access | ?{try{$_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={$rootfolder}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
    gci $rootfolder -Recurse -Directory -PipelineVariable f | %{
        (Get-ACL $_.Fullname).Access | ?{try{$_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={$f.Fullname}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
    }
}
Get-FolderRightsForAccount -dn (Get-ADGroup $AD).distinguishedName -rootfolder $o -includeInheritedRights | ft -AutoSize 
read-host
Mitglied: 141965
141965 21.11.2019 aktualisiert um 15:29:08 Uhr
Goto Top
System.Object" kann nicht in den Typ "Microsoft.ActiveDirectory.Management.ADGroup" konvertiert
Die Fehlermeldung ist ja eindeutig, Get-AdGroup erwartet ja eine einzelne "Identity" und kein Array aus irgendwelchen Objekten, also nehme das erste Objekt aus dem Array und davon den Path (in dem ja laut deiner Aussage der distinguishedName dein steht)

Get-FolderRightsForAccount -dn $AD.Path -rootfolder $o -includeInheritedRights | ft -AutoSize 
Mitglied: dispatcher
dispatcher 21.11.2019 um 15:29:00 Uhr
Goto Top
Jetzt kommt folgender Fehler:

Get-ADObject : Das Argument für den Parameter "Identity" kann nicht überprüft werden. Die Identitätseigenschaft des Arguments ist NULL oder leer.

Get-ADPrincipalGroupMembership : Das Argument für den Parameter "Identity" kann nicht überprüft werden. Die Identitätseigenschaft des Arguments ist NULL oder leer.
Mitglied: 141965
141965 21.11.2019 aktualisiert um 15:37:28 Uhr
Goto Top
Dann ists wohl jetzt kein Array mehr und du kannst die Eigenschaft direkt ansprechen und so übergeben
$AD.Path
Get-FolderRightsForAccount -dn ([String]$AD.Path) -rootfolder $o -includeInheritedRights | ft -AutoSize 
Mitglied: dispatcher
dispatcher 21.11.2019 um 15:32:51 Uhr
Goto Top
Mach ich es so, kommt folgender Fehler:

Get-ADObject : Verzeichnisobjekt nicht gefunden
Mitglied: 141965
141965 21.11.2019 aktualisiert um 15:34:22 Uhr
Goto Top
Wie sieht der DN denn exakt aus? Stammt der aus der aktuellen Domain oder einer anderen?
Müssen wir dir hier alles aus der Nase ziehen??
Mitglied: dispatcher
dispatcher 21.11.2019 um 15:34:31 Uhr
Goto Top
der stammt aus der aktuellen
Mitglied: 141965
141965 21.11.2019 aktualisiert um 15:36:57 Uhr
Goto Top
und weiter? Siehe mein letzter Code offensichtlich nicht richtig übernommen ...
Mitglied: dispatcher
dispatcher 21.11.2019 um 15:38:53 Uhr
Goto Top
Doch, ich habe deinen Code 1zu1 übernommen. Im Picker findet er ja auch eine Gruppe -> Domäne stimmt
Mitglied: 141965
141965 21.11.2019 aktualisiert um 15:48:48 Uhr
Goto Top
Beantworte doch mal alle Fragen von meinen zwei letzten Posts, und korrigiere den Code mal so wie er jetzt oben steht (wandelt explizit in einen String um), wir bekommen von dir leider zu spärliche Infos zu den Objekttypen , deswegen müssen wir hier ein de Ecke raten . Du verwendest da ja ein Control das nicht alltäglich ist.

$AD | gm *
Mitglied: emeriks
emeriks 21.11.2019 um 15:51:04 Uhr
Goto Top
Ich dachte, es war klar, dass da ein Array kommt. Sonst hätte ich Dir doch nicht "$AD" geschrieben?
Und ja, dann muss man das für jedes einzelne Objekt ausführen.

Was liefert denn
$AD.FetchedAttributes
Ein Bsp. bitte!
Mitglied: 141965
141965 21.11.2019 aktualisiert um 16:00:13 Uhr
Goto Top
Zitat von @emeriks:

Ich dachte, es war klar, dass da ein Array kommt. Sonst hätte ich Dir doch nicht "$AD" geschrieben?
Hatte ich ihm oben auch schon geschrieben, aber offensichtlich war es bei diesem Versuch doch wieder kein Array, vermutlich hat er diesmal nur eine Gruppe ausgewählt.
Wenn er mehrere Auswählen will dann muss er ja auch eine Foreach-Schleufe drum bauen das ist klar.

Wenn in der Property Path ja schon der DN der Gruppe drin steht reicht der ja , aber dazu verliert er auch kein weiteres Wort.

Leider bringt er nur unzureichende Infos zu Objekttypen usw. 🥵

Freitagsverboten.