2024年9月18日 星期三

Pnp.PowerShell 新式登入方法 如何使用委任權限登入

Pnp.PowerShell 新式登入方法 如何使用委任權限登入

參考這兩篇文章的提示想通了

  1. PnP PowerShell を利用するための Microsoft Entra ID アプリケーションを登録する方法 (zenn.dev)
  2. 使用 PnP PowerShell 連接到 SharePoint Online - SharePoint 日記 (sharepointdiary.com)

簡單來說 2024-09-09 當天的改動是移除掉一個預設應用程式,該應用程式的ID是 31359c7f-bd7e-475c-86db-fdb8c937548e

報錯的信息是

AADSTS700016: Application with identifier ‘31359c7f-bd7e-475c-86db-fdb8c937548e’ was not found in the directory ‘<テナント名>’.
(‘31359c7f-bd7e-475c-86db-fdb8c937548e’は、PnP Managment Shell アプリケーションの共通の ID)

這應用程式是你不用自己新增也會自己有的,並且 PnP.PowerShell 預設會去叫這組應用程式來執行委任權限


委任權限的執行方法是需要過一組使用者帳號的

Connect-PnPOnline -Url $siteUrl -Credentials (Get-Credential)


如何呼叫別組應用程式,可以從環境變數中設定

$env:ENTRAID_APP_ID = $cliendId


也就是真正需要的只有

  1. 重建自己的應用程式
  2. 設置適當的委任權限
  3. 增加環境變數 ENTRAID_APP_ID = ClientID

如此一來對於沒有MFA認證的帳號,就一樣可以回復到原本的純帳密登入了。


開始之前記得先更新一下 PnP.PowerShell 夜間最新版,最近頻率很常估計bug很多。

# 移除所有版本
Uninstall-Module PnP.PowerShell -AllVersions -Force

# 安裝最新夜間版本
Install-Module -Name PnP.PowerShell -AllowPrerelease -Force

# 版本確認
Get-Module -ListAvailable PnP.PowerShell


* PnP.PowerShell要大於 2.12 版本才能作用,在此之前版本無法更改 ENTRAID_APP_ID 是無法登入的。




應用程式權限

對於權限先給一個通用權限,這個權限就足夠上傳檔案了。



測試委任權限先設置 AllSites.Manage 就足夠了,記得右邊要綠色打勾才會起作用。

即使上面寫不用管理權限也必須用管理員承認一次才能起作用,詳細原因我也不清楚。


你可以隨意丟一個文件上去試試看,能過就行了其他再自己摸索需要哪些權限

Add-PnPFile -Path "README.md" -Folder "Shared Documents"




完整的無應答登入代碼

注意使用純帳密登入必須移除MFA多重驗證 (或是有調過Policy安全政策)

# 設置登入信息
$cliendId = "Your-Client-ID"
$siteUrl  = "https://[TelentName].sharepoint.com/sites/[SiteName]"
$username = "[UserName]@[TelentName].onmicrosoft.com"
$password = "UserPassWord"
$credentials = New-Object System.Management.Automation.PSCredential($username, (ConvertTo-SecureString $password -AsPlainText -Force))

# 登入 SharePoint
$env:ENTRAID_APP_ID = $cliendId
Connect-PnPOnline -Url $siteUrl -Credentials $credentials

# 獲取網站文件目錄
Get-PnPFolder -Url "/Shared Documents"


* 記得確保 powershell 版本要大於7版, pnp.powershell 要大於 2.12 版本




沒有留言:

張貼留言