function Get-NestedMembers
{
[CmdletBinding()]
[Alias()]
[OutputType([int])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
Position=0)]
[string]$ADGroup
)
Begin
{
}
Process
{
$ADMembers=Get-ADGroupMember -Identity $ADGroup
$ADMembers | ForEach-Object {
if ($_.objectClass -eq 'Group')
{
Get-NestedMembers -ADGroup $_.Name
}#end if
else
{
[PSCustomObject]@{Name=$_.Name;
FromGroup=$ADGroup;
LoginName=$_.SAMAccountName;
DistinguishedName=$_.DistinguishedName}
}#end else
}#end foreach
}#end Process
End
{
}
}#end function Get-NestedMembers
Get-NestedMembers | Export-Csv 'ADGroup2.csv' -NoTypeInformation
I have this function to get nested group members and the output is currently fine. However when the function runs it loses the variable $ADGroup which I believe is correct in PowerShell. Is there way to pass the variable so I can export-csv ‘$ADGroup.csv’. With my current file I have to rename it to the group name after each time I run this.
So, your Begin/Process/End blocks are not used here, because your command doesn’t accept pipeline input.
I don’t know what you mean by “lose” $ADGroup. You’ve defined $ADGroup as an input parameter. I would expect:
Get-NestedMembers -ADGroup "something"
When you run the command. That’s how $ADGroup gets populated. But it only exists within Get-NestedMembers; there’s no way for that parameter to be passed down the pipeline to another command like Export-Csv. What you’d do instead is write a small “controller” script.
I started with the snippets so I just left the Begin/Process/End blocks.
When I run it with:
Get-NestedMembers -ADGroup $ADGroup | Export-CSV “$ADGroup.csv”
This gets me this error.
Get-NestedMembers : Cannot bind argument to parameter ‘ADGroup’ because it is an empty string.
At C:\PSScripts\Functions\Get-NestedMembers1.ps1:55 char:28
I must be missing something. I believe by design it removes the variable $ADGroup after the function runs so it is an empty string. Generally I run this and let it prompt for the ADGroup. That make it easiest to repeat for multiple groups.
You’re likely getting confused because the same ADGroup variable name was being used in different scopes. Here, I’ve used a different variable name to try and make it clearer.
That does work but it requires me to reset the $ADGroup for each group before running the function. Here is one I have as a script that does about the same thing but I haven’t converted it to a function yet for the same reason. Sorry if this is a bit weird.
Since it is not a function it passes through and names the folder by the group name.