Find et websteds id i SharePoint
Webstedets GUID fra REST, det sammensatte id fra Microsoft Graph og begge fra PowerShell — og hvordan de to formater hænger sammen.
Graph-kald, flows på tværs af websteder, rettigheder til én app på ét websted og migreringsværktøjer vil have webstedets id, og det står ingen steder i brugerfladen. Der er to formater:
Simple GUID: <site-id>
Composite format: contoso.sharepoint.com,<site-id>,<web-id>
└─ hostname ─────┘ └─ site collection ID ┘ └─ web ID ┘
SharePoints REST-API bruger det første. Graph bruger det andet: værtsnavn, webstedssamlingens id og webbens id, adskilt af komma. Webbens id er en anden GUID end webstedssamlingens, også på rodwebben.
I browseren#
Hurtigst: /_api/site/id efter webstedets adresse.
https://contoso.sharepoint.com/sites/ProjectAlpha/_api/site/id
1<?xml version="1.0" encoding="utf-8"?>
2<d:Id xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"><site-id></d:Id>
/_api/web/id giver webbens id på samme måde. Browseren får XML, fordi den ikke beder om andet. Med $select og $format=json:
https://contoso.sharepoint.com/sites/ProjectAlpha/_api/site?$select=Id&$format=json
1{
2 "d": {
3 "Id": "<site-id>"
4 }
5}
Fra Power Automate med REST#
Send an HTTP request to SharePoint mod webstedet. Den hører til SharePoint-connectoren og kræver ikke Premium.
_api/site?$select=Id
1{
2 "Accept": "application/json;odata=nometadata",
3 "Content-Type": "application/json;odata=nometadata"
4}

1{
2 "Id": "<site-id>"
3}
body('Send_an_HTTP_request_to_SharePoint_-_Get_SiteID')?['Id']
Hele forløbet:
Manual Trigger
↓
Initialize Variable: varSiteURL
Value: "https://contoso.sharepoint.com/sites/ProjectAlpha"
↓
Send HTTP Request: Get Site ID
Site: varSiteURL
Method: GET
Uri: _api/site?$select=Id
Headers: {"Accept": "application/json;odata=nometadata"}
↓
Initialize Variable: varSiteID
Value: @{body('Send_HTTP_Request')?['Id']}
↓
Compose: Display Site ID
Inputs: @{variables('varSiteID')}
Som et underflow, der kan kaldes fra andre flows med en adresse og giver id’et tilbage:
Send HTTP Request
Site: @{triggerBody()?['SiteURL']}
Method: GET
Uri: _api/site?$select=Id
↓
Respond to a PowerApp or flow
SiteID: @{body('HTTP_Request')?['Id']}
Run a Child Flow: GetSiteID
SiteURL: variables('varSiteURL')
↓
Set Variable: varSiteID
Value: @{outputs('GetSiteID')?['body/SiteID']}
Fra Microsoft Graph#
Webstedet slås op på værtsnavn og sti, med kolon imellem:
https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/ProjectAlpha
1{
2 "id": "contoso.sharepoint.com,<site-id>,<web-id>",
3 "displayName": "Project Alpha",
4 "name": "ProjectAlpha",
5 "webUrl": "https://contoso.sharepoint.com/sites/ProjectAlpha"
6}
I Power Automate med HTTP-handlingen (Premium) og Entra ID-godkendelse: tenant, audience https://graph.microsoft.com, klient-id og hemmelighed eller certifikat fra en app med Sites.Read.All.
Kolonet efter værtsnavnet skal med, og https:// skal ikke:
❌ sites/contoso.sharepoint.com/sites/ProjectAlpha (missing colon)
❌ sites/https://contoso.sharepoint.com:/sites/ProjectAlpha (includes https://)
✅ sites/contoso.sharepoint.com:/sites/ProjectAlpha (correct)
Delene af det sammensatte id:
split(body('HTTP')?['id'], ',')[1]
[0] er værtsnavnet, [1] webstedssamlingens id — det samme som REST giver — og [2] webbens id.
Er adressen ukendt, kan der søges på navnet:
GET https://graph.microsoft.com/v1.0/sites?search=Project Alpha
1{
2 "value": [
3 {
4 "id": "contoso.sharepoint.com,<site-id>,<web-id>",
5 "displayName": "Project Alpha",
6 "name": "ProjectAlpha",
7 "webUrl": "https://contoso.sharepoint.com/sites/ProjectAlpha"
8 }
9 ]
10}
HTTP (Azure AD auth)
Method: GET
Uri: https://graph.microsoft.com/v1.0/sites?search=@{variables('varSiteName')}
↓
Parse JSON: Response
Schema: {...}
↓
Apply to Each: Sites in value array
↓
Condition: displayName equals target site
↓ Yes
Set variable: varSiteID = items('Apply_to_each')?['id']
Søgningen giver alle websteder, der ligner, så betingelsen på displayName skal med.
To veje, der ikke er efterprøvet: Send an HTTP request fra Office 365 Groups-connectoren med URI’en /sites/contoso.sharepoint.com:/sites/ProjectAlpha (Graph uden egen app-registrering, men handlingen har været begrænset til gruppe-endpoints), og SharePoints _api/v2.0/sites, der skulle give det sammensatte format direkte.
Fra PowerShell#
PnP PowerShell, ét websted:
1# Install PnP PowerShell (if not installed)
2Install-Module -Name PnP.PowerShell -Force -AllowClobber
3
4# Connect to SharePoint
5Connect-PnPOnline -Url "https://contoso.sharepoint.com/sites/ProjectAlpha" -Interactive
6
7# Get site ID
8$site = Get-PnPSite -Includes Id
9$siteId = $site.Id
10Write-Host "Site ID: $siteId"
Adresser fra en CSV-fil med kolonnen URL, både webstedets og webbens id, og fejl pr. websted i stedet for at stoppe:
1# Import site URLs from CSV
2$sites = Import-Csv -Path "SiteURLs.csv"
3
4# CSV format:
5# URL
6# https://contoso.sharepoint.com/sites/Site1
7# https://contoso.sharepoint.com/sites/Site2
8
9$results = @()
10foreach ($site in $sites) {
11 try {
12 Connect-PnPOnline -Url $site.URL -Interactive
13 $siteInfo = Get-PnPSite -Includes Id
14 $webInfo = Get-PnPWeb
15
16 $results += [PSCustomObject]@{
17 URL = $site.URL
18 SiteID = $siteInfo.Id
19 WebID = $webInfo.Id
20 Title = $webInfo.Title
21 Status = "Success"
22 }
23 }
24 catch {
25 $results += [PSCustomObject]@{
26 URL = $site.URL
27 SiteID = "N/A"
28 WebID = "N/A"
29 Title = "N/A"
30 Status = "Error: $($_.Exception.Message)"
31 }
32 }
33}
34
35$results | Export-Csv -Path "SiteIDs_Results.csv" -NoTypeInformation
36Write-Host "Completed. Results exported to SiteIDs_Results.csv"
-Interactive kræver i dag et -ClientId fra en app-registrering i egen tenant, fordi PnP’s fælles app er fjernet.
Alle webstedssamlinger i tenanten med SharePoint Online Management Shell:
1# Install SharePoint Online Management Shell (if not installed)
2Install-Module -Name Microsoft.Online.SharePoint.PowerShell -Force
3
4# Connect to SharePoint admin center
5Connect-SPOService -Url "https://contoso-admin.sharepoint.com"
6
7# Get all site collections with IDs
8$sites = Get-SPOSite -Limit All | Select-Object Url, @{Name="SiteID"; Expression={$_.Id}}, Title
9
10# Display results
11$sites | Format-Table -AutoSize
12
13# Filter specific site
14$site = Get-SPOSite -Identity "https://contoso.sharepoint.com/sites/ProjectAlpha"
15Write-Host "Site ID: $($site.Id)"
Gem dem#
Id’et ændrer sig ikke, så det behøver kun at blive hentet én gang. De kan holdes i en liste med kolonnerne SiteName, SiteURL (hyperlink), SiteID og LastUpdated, og et flow fylder id’erne ud om natten:
Recurrence: Daily at 2 AM
↓
Get Items: Site Registry List (contains URLs)
↓
Apply to Each: Site
↓
Send HTTP Request: Get Site ID
Site: @{items('Apply_to_each')?['SiteURL']}
Method: GET
Uri: _api/site?$select=Id
↓
Update Item: Site Registry List
ID: @{items('Apply_to_each')?['ID']}
SiteID: @{body('HTTP_Request')?['Id']}
Det der driller#
- Graph vil have kolon efter værtsnavnet og intet
https://foran. Uden kolon svarer Graph 404. - Webstedssamling og web er to id’er.
_api/site/idogGet-SPOSitegiver webstedssamlingens. En underweb har sit eget, som kun_api/web/id,Get-PnPWebog Graphs tredje led giver. - “Access denied” betyder, at kontoen i forbindelsen ikke kan læse webstedet, eller at appen mangler
Sites.Read.All. - Et tomt id fra PowerShell skyldes oftest en forbindelse, der peger et andet sted hen end forventet.
Disconnect-PnPOnlineog forbind igen.