Búsqueda de sitios web

SharePoint Online: busque todos los usuarios externos mediante PowerShell


Requisito: Listar usuarios externos de SharePoint Online que utilizan PowerShell.

Se puede invitar a usuarios fuera de las organizaciones a colaborar con SharePoint Online como "Usuarios externos". Como dice Microsoft:

“Un usuario externo es alguien fuera de su organización que puede acceder a sus sitios y documentos de SharePoint Online pero no tiene una licencia para su suscripción a SharePoint Online o Microsoft Office 365. Los usuarios externos no son empleados, contratistas ni agentes en el sitio para usted o sus afiliados.

SharePoint Online: ¿Cómo conseguir usuarios externos?

Como parte de las políticas de gobernanza, queríamos tomar control sobre el uso compartido externo, así que tuve que ver cuántos usuarios externos se agregan a SharePoint Online y dónde. El cmdlet Get-SPOExternalUser enumera todos los usuarios externos en nuestro inquilino de Office 365. Para que un usuario externo aparezca en la lista usando este cmdlet de PowerShell, debe haber aceptado la invitación al entorno de SharePoint Online e iniciado sesión al menos una vez.

Buscar usuarios externos en SharePoint Online:

¿Cómo puedo enumerar los usuarios externos que acceden a mi sitio de SharePoint Online? Para ver usuarios externos en SharePoint Online, había una página en el antiguo centro de administración de Office 365: Uso compartido externo >> Usuario externo. Pero esta página quedó obsoleta. Entonces, ¡nos quedamos con PowerShell! Abra el Shell de administración de SharePoint Online y ejecute el siguiente script para ver los usuarios externos de 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

¡Pero espera! ¡El cmdlet Get-SPOExternalUser tiene la limitación de devolver solo los primeros 50 usuarios! Por lo tanto, debemos modificar un poco el script para que todos los usuarios externos accedan a SharePoint Online.


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

Esto recupera todos los usuarios externos del inquilino de SharePoint Online.

Obtener usuarios externos de una colección de sitios específica:

Si desea buscar usuarios externos de su sitio de SharePoint Online, especifique el parámetro "SiteUrl". P.ej.,


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

Esto lleva a los usuarios externos a una colección de sitios de SharePoint específica.

PnP PowerShell para atraer a todos los usuarios externos a un sitio

Podemos obtener una lista de usuarios externos de un sitio de SharePoint Online usando el cmdlet PnP PowerShell Get-PnPExternalUser


$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

Obtenga todos los usuarios externos en un sitio de SharePoint Online y expórtelos a un informe CSV

Puede llegar un momento en el que necesite obtener una lista de todos los usuarios externos que tienen acceso a su sitio de SharePoint Online. Bueno, con sólo unas pocas líneas de código, puede obtener fácilmente una lista de todos los usuarios externos que tienen acceso a su sitio de SharePoint Online y exportarlos a un informe 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

El script anterior obtiene todos los usuarios externos del sitio determinado y los exporta a CSV.

SharePoint Online busque usuarios externos y exporte a CSV:

Debe recorrer cada colección para obtener la lista de usuarios externos. El siguiente script de PowerShell le permite recorrer cada colección de sitios y determinar los usuarios externos. Combinemos todo y exportemos la lista de usuarios externos a un archivo 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

¡Esto genera un informe de usuario externo de SharePoint Online!

Método alternativo para obtener todos los usuarios externos: colección de sitios:

Últimamente encontré algunos problemas en el cmdlet Get-SPOExternalUser. En algunos casos, no devuelve todos los usuarios externos. Entonces, usemos el cmdlet Get-SPOUser para obtener usuarios externos por colección de sitios.


#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

Para enumerar usuarios externos en SharePoint Online, también puede utilizar lo siguiente:


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

Generar informes de usuarios externos para todas las colecciones de sitios en el inquilino mediante PnP PowerShell

Busquemos todos los usuarios externos de todos los sitios de SharePoint Online en el inquilino y exportémoslos a un archivo 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 para obtener usuarios externos de Azure AD

Esta vez, consultemos directamente Azure AD para todos los usuarios externos. Estos usuarios pueden tener o no permiso para acceder al sitio de SharePoint Online, como nota al margen. A continuación se explica cómo obtener cuentas de invitado usando 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

Artículos relacionados