CreateGroupusingCsv.ps1


<#PSScriptInfo
 
.VERSION 1.0
 
.GUID 48f1b614-29b2-46ad-abef-10c3f9cfd491
 
.AUTHOR manidurai
 
.COMPANYNAME
 
.COPYRIGHT
 
.TAGS
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 
 
#>


<#
 
.DESCRIPTION
 Using this script you create the office 365 group with member using csv
 
#>
 
Param(
[Parameter(ParameterSetName = "Inputparameter",Position=1,Mandatory=$True)]
[String]$ClientID,
[Parameter(ParameterSetName = "Inputparameter",Position=2,Mandatory=$True)]
[String]$ClientSecret,
[Parameter(ParameterSetName = "Inputparameter",Position=3,Mandatory=$True)]
[String]$TenantID,
[Parameter(ParameterSetName = "Inputparameter",Position=4,Mandatory=$True)]
[String]$Path
)
Function Export-Group
{
    param(
           #credentials
           [Parameter(Mandatory=$True,position=0)]
                [string]$ClientID,
           [Parameter(Mandatory=$True,position=1)]
                [string]$ClientSecret,
           [Parameter(Mandatory=$True,position=2)]
                [string]$TenantID,
           [Parameter(Mandatory=$True,position=3)]
                [string]$Path
         )

    $LoginUrl="https://login.microsoft.com"
    $Resource="https://graph.microsoft.com" 

    #Get access token
    $Body = @{grant_type="client_credentials";resource=$Resource;client_id=$ClientID;client_secret=$ClientSecret}
    $TokenLink= "https://login.microsoftonline.com/"+ $TenantID +"/oauth2/token"
    $OAuth      = Invoke-RestMethod -Method POST -Uri $TokenLink -Body $Body

    #Header
    $HeaderParams = @{'Authorization'="$($OAuth.token_type) $($OAuth.access_token)"}

    #Fetch groups
    $GroupsUri = "https://graph.microsoft.com/v1.0/groups"
    $Groups=Invoke-RestMethod -Method get -Uri $GroupsUri -Headers $HeaderParams

    $Groups.value|ForEach-Object{
       
            $Group=$_
            $MemberName=''
            #fetch members for current groups
            $MembersUri="https://graph.microsoft.com/v1.0/groups/"+$Group.id+"/members"
            $Members=Invoke-RestMethod -Method get -Uri $MembersUri -Headers $HeaderParams
            $Members.value|ForEach-Object{
            
                $Member=$_
                #comma seperation
                if($MemberName -eq '')
                {
                    $MemberName+=$Member.displayname
                }else{
                    $MemberName+=','
                    $MemberName+=$Member.displayname
                }             
             }
    New-Object -TypeName PSObject -Property @{
    Groupname = $Group.displayname
    Members = $MemberName}
    }|select groupname,members|Export-Csv $Path -NoTypeInformation #Export to csv

}
Export-Group -ClientID xxxxxxxxxxxxxxxxxxxxxxxxx -ClientSecret "xxxxxxxxxxx~!" -TenantID "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx" -Path "C:\Groupwithmembers.csv"