当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:使用 PowerShell 查找所有外部用户

作者:精品下载站 日期:2024-12-14 14:47:23 浏览:14 分类:玩电脑

SharePoint Online:使用 PowerShell 查找所有外部用户


要求: SharePoint Online 使用 PowerShell 列出外部用户。

[玩转系统] SharePoint Online:使用 PowerShell 查找所有外部用户

可以邀请组织外部的用户作为“外部用户”与 SharePoint Online 进行协作。正如微软所说:

“外部用户是组织外部的人员,可以访问您的 SharePoint Online 网站和文档,但没有 SharePoint Online 或 Microsoft Office 365 订阅的许可证。外部用户不是您或您的关联公司的员工、承包商或现场代理。

SharePoint Online:如何获取外部用户?

作为治理策略的一部分,我们希望控制外部共享,因此我必须查看有多少外部用户添加到 SharePoint Online 以及添加到何处。 Get-SPOExternalUser cmdlet 列出 Office 365 租户中的所有外部用户。对于要使用此 PowerShell cmdlet 列出的外部用户,他们必须已接受 SharePoint Online 环境的邀请并至少登录一次。

在 SharePoint Online 中查找外部用户:

如何列出访问我的 SharePoint Online 网站的外部用户?要在SharePoint Online中查看外部用户,旧Office 365管理中心中有一个页面:外部共享>>外部用户。但该页面已被弃用。所以,我们只剩下 PowerShell 了!打开 SharePoint Online Management Shell 并运行以下脚本以查看外部用户 SharePoint Online:


#Connect to SharePoint Online Tenant Admin
$AdminSiteURL="https://crescent-admin.sharepoint.com"

$Cred = Get-Credential
Connect-SPOService -URL $AdminSiteURL -Credential $Cred

#sharepoint online list external users powershell
Get-SPOExternalUser | Select DisplayName,Email,AcceptedAs,WhenCreated | Format-Table

可是等等! Get-SPOExternalUser cmdlet 具有仅返回前 50 个用户的限制!因此,我们需要稍微修改一下脚本以获取 SharePoint Online 中的所有外部用户。


Try {
    For ($x=0;;$x+=50) {
        $ExternalUsers += Get-SPOExternalUser -PageSize 50 -Position $x -ErrorAction Stop
    }
}
Catch {}
$ExternalUsers

这将检索 SharePoint Online 租户的所有外部用户。

获取特定网站集的外部用户:

如果您想要查找 SharePoint Online 网站的外部用户,请指定“SiteUrl”参数。例如。,


Get-SPOExternalUser -Position 0 -PageSize 50 -SiteUrl <Your-Site-Url>

这将获取特定 SharePoint 网站集上的外部用户。

PnP PowerShell 获取站点上的所有外部用户

我们可以使用 PnP PowerShell cmdlet Get-PnPExternalUser 从 SharePoint Online 站点获取外部用户列表


$SiteURL = "https://crescent.SharePoint.com/sites/retail"

#Connect to Site
Connect-PnPOnline -Url $SiteURL -Interactive

$ExternalUsers = @()
#Get All External users
Try {
    For ($x=0;;$x+=50) 
    {
            $ExternalUsers += Get-PnPExternalUser -SiteUrl $SiteUrl -Position $x -PageSize 50 -ErrorAction Stop | Select DisplayName,EMail,InvitedBy,AcceptedAs,WhenCreated
    }
}
catch {}

#Get All External users
$ExternalUsers

获取 SharePoint Online 网站中的所有外部用户并导出到 CSV 报告

有时您可能需要获取有权访问您的 SharePoint Online 网站的所有外部用户的列表。只需几行代码,您就可以轻松获取有权访问您的 SharePoint Online 网站的所有外部用户的列表,并将它们导出到 CSV 报告。


#Config Parameters
$AdminSiteURL="https://crescent-admin.sharepoint.com"
$SiteURL="https://crescent.sharepoint.com/sites/le"
$ReportOutput ="C:\Temp\ExternalUsersRpt.csv"
 
#Connect to SharePoint Online
Connect-SPOService -URL $AdminSiteURL
 
#Get the Site Collection
$Site  = Get-SPOSite -Identity $SiteURL

$ExternalUsers =@()
Write-host -f Yellow "Getting External users from Site Collection:"$Site.URL
Try {
    For ($x=0;;$x+=50) {
        $ExternalUsers += Get-SPOExternalUser -SiteUrl $Site.Url -Position $x -PageSize 50 -ErrorAction Stop | Select DisplayName,EMail,InvitedBy,AcceptedAs,WhenCreated
    }
}
catch {}
 
#Export the Data to CSV file
$ExternalUsers | Export-Csv -Path $ReportOutput -NoTypeInformation

上面的脚本从给定站点获取所有外部用户并将其导出到 CSV。

[玩转系统] SharePoint Online:使用 PowerShell 查找所有外部用户

SharePoint Online 查找外部用户并导出到 CSV:

您必须循环访问每个集合才能获取外部用户的列表。以下 PowerShell 脚本允许您迭代每个网站集并确定外部用户。让我们结合所有内容并将外部用户列表导出到 CSV 文件:


#Import SharePoint Online Management Shell
Import-Module Microsoft.Online.Sharepoint.PowerShell -DisableNameChecking

#Config Parameters
$AdminSiteURL="https://crescent-admin.sharepoint.com"
$ReportOutput ="C:\Temp\ExternalUsersRpt.csv"

#Get Credentials to connect
$Cred = Get-Credential

#Connect to SharePoint Online Tenant Admin
Connect-SPOService -URL $AdminSiteURL -Credential $Cred

#Get All Site Collections
$SiteCollections  = Get-SPOSite -Limit All

#Iterate through each site collection and get external users
Foreach ($Site in $SiteCollections)
{
    Write-host -f Yellow "Checking Site Collection:"$Site.URL
    Try {
        For ($x=0;;$x+=50) {
            $ExternalUsers += Get-SPOExternalUser -SiteUrl $Site.Url -Position $x -PageSize 50 -ErrorAction Stop | Select DisplayName,EMail,InvitedBy,AcceptedAs,WhenCreated,@{Name = "SiteUrl" ; Expression = {$Site.url} 
        }
    }
}
catch {}
}

#Export the Data to CSV file
$ExternalUsers | Export-Csv -Path $ReportOutput -NoTypeInformation

这将生成 SharePoint Online 外部用户报告!

获取所有外部用户的替代方法 - 明智的网站集:

最近,我在 Get-SPOExternalUser cmdlet 中发现了一些问题。在某些情况下,它不会返回所有外部用户。因此,让我们使用 Get-SPOUser cmdlet 通过网站集获取外部用户。


#Import SharePoint Online Management Shell
Import-Module Microsoft.Online.Sharepoint.PowerShell -DisableNameChecking

#Config Parameters
$AdminSiteURL="https://crescent-admin.sharepoint.com"
$ReportOutput ="C:\Temp\ExternalUsersRpt.csv"

#Get Credentials to connect
$Cred = Get-Credential

#Connect to SharePoint Online Tenant Admin
Connect-SPOService -URL $AdminSiteURL -Credential $Cred

#Get all Site Collections
$SitesCollection = Get-SPOSite -Limit ALL

$ExternalUsers=@()
#Iterate through each site collection
ForEach($Site in $SitesCollection)
{
    Write-host -f Yellow "Checking Site Collection:"$Site.URL

    #Get All External users of the site collection
    $ExtUsers = Get-SPOUser -Limit All -Site $Site.URL | Where {$_.LoginName -like "*#ext#*" -or $_.LoginName -like "*urn:spo:guest*"}
    If($ExtUsers.count -gt 0)
    {
        Write-host -f Green "Found $($ExtUsers.count) External User(s)!"
        $ExternalUsers += $ExtUsers
    }
}

#Export the Data to CSV file
$ExternalUsers | Export-Csv -Path $ReportOutput -NoTypeInformation

要列出 SharePoint Online 中的外部用户,您还可以使用以下命令:


Get-SPOUser -Site $SiteURL -Limit All | Where-Object {$_.UserType -eq "Guest"}

使用 PnP PowerShell 为租户中的所有网站集生成外部用户报告

让我们从租户中的所有 SharePoint Online 网站查找所有外部用户,并将其导出到 CSV 文件。


#Parameter
$Domain =  "crescentintranet" #Domain Name in SharePoint Online. E.g. https://Crescent.sharepoint.com
$CSVFile = "C:\Temp\ExternalSharing.csv"

#Frame Tenant URL and Tenant Admin URL
$TenantURL = "https://$Domain.SharePoint.com"
$TenantAdminURL = "https://$Domain-Admin.SharePoint.com"

#Delete the Output report file if exists 
If (Test-Path $CSVFile) { Remove-Item $CSVFile }

#Connect to Admin Center
Connect-PnPOnline -Url $TenantAdminURL -Interactive
   
#Get All Site collections with External sharing enabled - Filter BOT and MySite Host
$Sites = Get-PnPTenantSite -Filter "Url -like '$TenantURL'" | Where {$_.SharingCapability -ne "Disabled"}
  
#Iterate through all site collections
$Sites | ForEach-Object {
    Write-host "Getting External Users of Site:"$_.URL -f Yellow
    #Connect to each site collection
    Connect-PnPOnline -Url $_.URL -Interactive
    $ExternalUsersData = @()

    #Get all External Users of the site collection
    $ExternalUsers = Get-PnPUser | Where {$_.LoginName -like "*#ext#*" -or $_.LoginName -like "*urn:spo:guest*"}    
    Write-host "`tFound '$($ExternalUsers.count)' External users" -f Green
    
    #Collect Data
    ForEach($User in $ExternalUsers)
    { 
        $ExternalUsersData += New-Object PSObject -Property ([ordered]@{
            SiteName = $_.Title
            SiteURL  = $_.URL
            UserName = $User.Title
            Email = $User.Email
        })
    }

    #Export Documents Inventory to CSV
    $ExternalUsersData | Export-CSV $CSVFile -NoTypeInformation -Append
}

Write-host "External Users Report Generated Successfully!" -f Magenta

PowerShell 从 Azure AD 获取外部用户

这次,我们直接查询所有外部用户的Azure AD!作为旁注,这些用户可能有权也可能没有访问 SharePoint Online 网站的权限。以下是使用 PowerShell 获取访客帐户的方法:


#Connect to AzureAD
Connect-AzureAD
 
#Get All External Users from AzureAD
$ExternalUsers = Get-AzureADUser -All:$True | Where {$_.UserType -eq "Guest"} 

Write-host "Total Number of External User Found:"$ExternalUsers.Count
$ExternalUsers | Select DisplayName, Mail

$CSVFile = "C:\temp\AzureExternalUsers.csv"
$ExternalUsers | Select DisplayName, Mail | Export-CSV $CSVFile -NoTypeInformation

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯