RamblingCookieMonster / Invoke-Parallel

Speed up PowerShell with simplified multithreading
MIT License
384 stars 88 forks source link

it is not working to get AD group member using Get-ADGroupMember #53

Closed amolsp777 closed 6 years ago

amolsp777 commented 6 years ago

Hello,

I am not able to run my scriptblock to fetch the ad group members after providing group name in Invoke-parallel.

getting this error `Get-RunspaceData : Cannot convert 'System.String[]' to the type 'Microsoft.ActiveDirectory.Management.ADUser' required by parameter 'Identity'. Specified method is not supported. At line:504 char:13

Here is the block
` $groupmemberBlock = {

[CmdletBinding()]
param (
[Parameter(Mandatory=$false)]
[string[]]$groupName # )

<#

if (Get-Module -ListAvailable -Name ActiveDirectory) { Write-Host "Module exists" } else { Write-Host "Module does not exist" Import-Module ActiveDirectory }

>

$ResultOut = @()

Write-Host "Checking Group - $groupName"

$members = Get-ADGroupMember $Group -recursive | Select-Object *

$members = Get-ADGroupMember -Identity $groupName #| Select-Object *

$ADgrp = Get-ADGroup $groupName -Properties *

$MemNames1 = $($members.Name)-join (",`n") $memCount = $($members.Name).count

    If($members.objectClass -eq "Group"){

    #Write-Host "Checking Inside Groups - $member"
    $memgrpnm = $members | ?{$_.ObjectClass -eq "Group"} 
    $membersGroup =  Get-ADGroupMember $memgrpnm.name 
    $membersGroup1 =$($membersGroup.Name) -join (",`n")
    $MemNames = ($MemNames1)+ -join (",`n") +$membersGroup1
    }

    Else {
    $MemNames = ($MemNames1)

    }

$MemSAM = $($members.SamAccountName) -split "," -join (",`n")

$Results = New-Object Object $Results | Add-Member -Type NoteProperty -Name 'Group' -Value $groupName $Results | Add-Member -Type NoteProperty -Name 'MembersCount' -Value $memCount $Results | Add-Member -Type NoteProperty -Name 'MembersName' -Value $MemNames $Results | Add-Member -Type NoteProperty -Name 'info' -Value $ADgrp.info $Results | Add-Member -Type NoteProperty -Name 'ManagedBy' -Value $ADgrp.ManagedBy $Results | Add-Member -Type NoteProperty -Name 'DistinguishedName' -Value $ADgrp.DistinguishedName

$ResultOut += $Results

$ResultOut

}

$groups = $($grouplist.name)

$groups = "automation-apps"

$GroupMemberOut = Invoke-Parallel -InputObject $groups -ScriptBlock $groupmemberBlock -RunspaceTimeout 300 -NoCloseOnTimeout $GroupMemberOut`

RamblingCookieMonster commented 6 years ago

Hi!

Try adding some logging or detailed error handling. This error means one of those commands is getting an array of strings for Identity parameter (this isn't allowed), most likely $membersGroup = Get-ADGroupMember $memgrpnm.name

Cheers!