M365関連 プログラム 技術

SharePointに対してリンクチェックをしてみる 2026年ver.

以前、CSOMの機能を使用してSharePointへのリンクチェックを実装したものを紹介していましたが、
SharePointOnlineに対するCSOMの一部機能が使えなくなったのでそれに代わる手法の紹介となります
ただ、以前のようにどんなULRに対しても使える万能な方法ではないのでそこだけ留意してください

関連記事
SharePointに対してリンクチェックをしてみる - ナストンのまとめ
SharePointに対してリンクチェックをしてみる - ナストンのまとめ

SharePointのURLに対して、リンクが切れていないか(アクセス可能か)のチェックする必要がありその際に四苦八苦し ...

関連記事へ

名称バージョン
PowerShell7.5.2

SharePoint REST APIのアクセストークンを取得する

SharePoint REST APIについては以前記事として書いており、その際に紹介した方法でアクセストークンを取得します

関連記事
SharePoint RestAPIをPowerShellから呼び出す - ナストンのまとめ
SharePoint RestAPIをPowerShellから呼び出す - ナストンのまとめ

以前、C#にてSharePoint RestAPIを使用する方法について書きました。その際は、読み込みしかできませんでし ...

関連記事へ

# SharePointサイトのURL
$spoAdminUrl = "SPOテナントAdminURL"
$tenantId = "使用するAzureアプリが存在するテナントID"
$clientId = "使用するAzureアプリのクライアントID"
$clientSecret = "使用するAzureアプリ上のクライアントシークレットの値"
# ユーザー資格情報(二段階認証の設定していないもの。対象サイトのサイトコレクション管理者またはサイトフルコントロールがあるユーザー)
$username = "認証時に使用するユーザーアドレス"
$password = "$usernameのパスワード"

$tokenRequestBody = @{
    grant_type    = "password"
    username      = $username
    password      = $password
    client_id     = $clientId
    client_secret = $clientSecret
    scope         = "$spoAdminUrl/.default"
}

$responseData = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" `
                                    -ContentType "application/x-www-form-urlencoded" `
                                    -Method POST -Body $tokenRequestBody

$accessToken = $responseData.access_token

実際にリンクチェックを実施する

SharePoint REST APIである『GetFileByServerRelativeUrl』を使用してそのレスポンスを見て判定するようにしています

$urlToChekc = "リンクチェック対象となるSPO上のURL"
$uri = New-Object System.Uri($urlToChekc)

if($urlToChekc -match "^(https://[^/]+/sites/[^/]+)") {
    $baseUrl = $matches[1]
    Write-Host "Base URL: $baseUrl"
} else {
    Write-Host "The URL does not match the expected pattern."
}

$relativeUrl = $uri.AbsolutePath
$endpoint = "$baseUrl/_api/web/GetFileByServerRelativeUrl('$relativeUrl')"

$headers = @{
    "Authorization" = "Bearer $accessToken"
}

Write-Host $relativeUrl
try {
    $response = Invoke-RestMethod -Uri $endpoint -Headers $headers -Method Head -UseBasicParsing
    Write-Host "Response Status Code: $($response.StatusCode)"
} catch {
    Write-Host "エラー詳細: $($_.Exception.Message)"
    Write-Host "$relativeUrl is not accessible. Status code: $($_.Exception.Response.StatusCode.value__)"
}

どういうものがエラーと判定されるのか

例えば、『https://Hoge.sharepoint.com/sites/Huga/Lists/Piyo/AllItems.aspx』というURLに対しては上記の方法で問題なく200となって帰ってきますが、『https://Hoge.sharepoint.com/sites/Huga/Lists/Piyo』になると404エラーとなってしまいます
また、『https://Hoge.sharepoint.com/sites/Huga』といったサイトURLに対しても404エラーとなってしまいます
やはり、以前まで使用できていたCSOM版のものが汎用性があったがために、今回の内容だけでは補うことができません
もし、他にいい方法がある場合は教えて欲しいです

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社|ADS Co., Ltd.
アドバンスド・ソリューション株式会社|ADS Co., Ltd.

Microsoft 365/SharePoint/Power Platform/Azure による DX コンサル・シス ...

サイトへ移動

PR

-M365関連, プログラム, 技術
-, ,