The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何使用 PowerShell 批次管理 Azure AD 使用者資訊

微軟真的家大業大,用 PowerShell 管理 Azure AD 使用者資訊竟然已經累積出了 4 套完全不一樣的 Cmdlets 模組,其中最建議使用的 Microsoft Graph PowerShell 真的是無敵難用到爆,但安全性高、速度快是其優點。本篇文章我就整理一下我近期常用的一些 Cmdlet 命令,方便日後透過 PowerShell 管理公司內部的使用者資訊。

登入

# 先設定登入的帳號密碼
$Credential = Get-Credential -Message "Login" -UserName "user@example.com"

# 連接 Azure Active Directory PowerShell for Graph
# Import-Module AzureAD
Connect-AzureAD -Credential $Credential

# 連接 MSOnline V1 PowerShell module for Azure Active Directory
# Install-Module MSOnline
# Import-Module MSOnline
Connect-MsolService -Credential $Credential

# 連接 Exchange Online PowerShell V3
# Install-Module -Name ExchangeOnlineManagement
# Import-Module -Name ExchangeOnlineManagement
Connect-ExchangeOnline -Credential $Credential

# 連接 Microsoft Graph PowerShell
# Install-Module -Name Microsoft.Graph
Connect-MgGraph -TenantId "$TenantId"

MSOnline V1 PowerShell module for Azure Active Directory

  • 取得所有使用者

    $users = Get-MsolUser -All
    
  • 取得特定部門下所有使用者

    $users = Get-MsolUser -All | Where-Object { $_.Department -eq "專案研發一部" }
    
    $users = Get-MsolUser -All | Where-Object { $_.Department -eq "專案研發一部" -or $_.Department -eq "專案研發二部" -or $_.Department -eq "營運管理部" }
    
  • 取得不在特定部門下所有使用者

    $users = Get-MsolUser -All | Where-Object { $_.Department -ne "專案研發一部" -and $_.Department -ne "專案研發二部" -and $_.Department -ne "營運管理部" }
    
  • 將使用者匯出成 CSV 檔

    $users | select DisplayName,UserPrincipalName,Department | Sort-Object { $_.Department } | Export-Csv -Path "g:\export.csv" -NoTypeInformation -NoClobber -Encoding utf8
    
  • 建立 M365 帳號並指派授權

    New-MsolUser -UserPrincipalName $UserPrincipalName -DisplayName $DisplayName -FirstName $FirstName -LastName $LastName -UsageLocation $UsageLocation -LicenseAssignment $LicenseAssignment -MobilePhone $MobilePhone -Office $Office -PhoneNumber $PhoneNumber -PreferredLanguage $PreferredLanguage -State $State -StreetAddress $StreetAddress -Title $Title -AlternateEmailAddresses $AlternateEmailAddresses -Country $Country -PostalCode $PostalCode -City $City -Department $Department -Fax $Fax
    
  • 重設使用者密碼

    Set-MsolUserPassword -UserPrincipalName "$UserPrincipalName" -NewPassword "$PlainPassword" -ForceChangePassword $true
    
  • 設定使用者顯示名稱

    Set-MsolUser -UserPrincipalName "$UserPrincipalName" -DisplayName ("$LastName" + "$FirstName" + "$EngName")
    
  • 設定使用者所屬部門

    Set-MsolUser -UserPrincipalName "user@example.com" -Department "專案研發二部"
    

Azure Active Directory PowerShell for Graph

  • 取得所有使用者

    $users = Get-AzureADUser -All $true
    
  • 取得特定部門下所有使用者

    $users = Get-AzureADUser -Filter "department eq '專案研發一部'"
    
    $users = Get-AzureADUser -Filter "department eq '專案研發一部' or department eq '專案研發二部' or department eq '營運管理部'"
    
  • 取得員工的直屬主管名稱

    $users | foreach {
      $employee = $_
      $manager = Get-AzureADUserManager -ObjectId $_.ObjectId
      $employee.DisplayName + "`t主管是 " + $manager.DisplayName
    }
    

Microsoft Graph PowerShell

  • 找出特定 Cmdlet 需要哪些 OAuth 2.0 Scope 權限

    Find-MgGraphCommand -command "Get-MgUser" | Select -First 1 -ExpandProperty Permissions
    
  • 取得所有使用者清單

    Connect-MgGraph -Scopes 'User.Read.All'
    $users = Get-MgUser -All
    
  • 列出所有使用者基本資訊(含信箱地址)

    $users | Format-List  ID, DisplayName, Mail, UserPrincipalName
    

Exchange Online PowerShell V3

  • 設定直屬主管

    $User = "tom"
    $Manager = "will"
    Set-User "$UserName" -Company "$CompanyName" -Manager "$Manager" -Confirm:$false
    
  • 設定中斷 Exchange Online PowerShell 的 Session

    Disconnect-ExchangeOnline -Confirm:$false
    

相關連結

留言評論