2024年9月23日 星期一

Evernote 使用率過高

近期有發現 Evernote 總是不斷的持續保持在 10~20% 左右的 CPU 佔用,似乎都不會下降,大致查了一下發現這篇

錯誤:Evernote 在後台時CPU使用率異常高。: r/Evernote (reddit.com)


總之裡面給出了幾個解法,最快的大概就是直接切換倒市集版本,由於市集版本與獨立安裝阪本位置是一樣的,你可以幾乎無損的轉移過去。

直接解除安裝然後,重裝安裝市集版本,不用重新登入所有資料都還在。

猜測應該是市集版本呼叫的應用程式不是叫做 evernote.exe 吧,討論有提到改名就好了...

如此白癡的錯誤怎麼可以脫這麼久還不修


2024年9月22日 星期日

如何下載最新版本 VMware Workstation 17

如何下載最新版本 VMware Workstation 17

根據這篇討論 下載在哪裡??|VMware 工作站 (broadcom.com)

有人挖出官方的連結 https://softwareupdate.vmware.com/cds/vmw-desktop/ws/17.6.2/24409262/windows/core/


裡面中 VMware-workstation-17.6.0-24238078.exe.tar 最新版的載點

載下來會變成一個 tar 檔案,直接用 Winrar 或是 7z 可以打開


或是使用 PowerShell 執行下面的指令,會在原地解開

tar -xvf .\VMware-workstation-17.6.0-24238078.exe.tar





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 版本




2024年9月17日 星期二

使用 PowerShell 生成自簽署證書

使用 PowerShell 生成自簽署證書

基於 SharePoint 的無應答登入模式改版後必須使用證書,這邊提供一個最簡證書生成方法,直接使用 PowerShell 5.1 內建的函式即可。

不過有以下兩個小缺點

  1. 無法匯出空白密碼的證書 pfx 檔案。(有這個需求用 OpenSSL 生成吧)
  2. 無法直接生成檔案,必須先存入 Windwos Certificate Store 匯出後再刪除


# 1. 定義変数
$CNName = "PnP_Roks"
$OutPath = "D:\mycertificates"
$ExpiryYears = 10

# 2. 生成自簽署證書,存儲在當前用戶證書存儲區
if(-not (Test-Path $OutPath)) { mkdir $OutPath }
$cert = New-SelfSignedCertificate -Subject "CN=$CNName" -DnsName $CNName `
  -CertStoreLocation Cert:\CurrentUser\My `
  -NotAfter (Get-Date).AddYears($ExpiryYears).date
$cert
# 3. 將證書公鑰導出為 CER 檔案 (需上傳到應用程式中)
$cert |Export-Certificate -FilePath "$OutPath\$CNName.cer"


# 4. 將證書導出為 PFX 檔案 (選用)
$Pword = "YourPasswordHere"
$cert |Export-PfxCertificate -FilePath "$OutPath\$CNName.pfx" `
  -Password (ConvertTo-SecureString -String $Pword -Force -AsPlainText)

# 5. 從證書存儲區移除剛生成的證書 (選用)
$cert | Remove-Item

這樣就生成完畢了,如果沒有移除證書的話可以在 certmgr.msc 中的 個人/憑證 區域找到該生成的證書。


需要上傳到 "應用程式" 中的只有 cer 證書而已,包含私鑰的 pfx 檔案不可以外洩。

比較理想的辦法是直接在目標伺服器生成證書,然後只匯出 cer 公鑰上傳到伺服器,一定程度避免私鑰產生副本。

環境允許的話甚至可以設置成不可匯出徹底銷毀,沒了再造一個就行。


上傳完畢接下來登入可以參考這篇 身份驗證 |PnP PowerShell





讀取證書檔案

其中如果要讀取 Store 中的 pfx 檔案可以這樣用

# 當前使用者
Get-Item -Path "Cert:\CurrentUser\My\$($cert.Thumbprint)"

# 本機
Get-Item -Path "Cert:\LocalMachine\My\$($cert.Thumbprint)"

對應的管理介面是

  • 當前用戶: certmgr.msc
  • 本機電腦: certlm.msc





2024年9月13日 星期五

2024-09-09 SharePoint 禁用帳密登入改動 如何使用Application應用程式登入

2024-09-09 SharePoint 禁用帳密登入改動 如何使用Application應用程式登入

突然的改動導致原本使用帳密登入 SharePoint 的腳本變得無法執行了。

具體的錯誤信息是以下報錯 AADSTS50076 的信息

Connect-PnPOnline : AADSTS50076: Due to a configuration change made by your administrator, or because you moved to a ne

w location, you must use multi-factor authentication to access '00000003-0000-0ff1-ce00-000000000000'. Trace ID: a28ff3

72-9f22-4018-9c6a-1341a7b16900 Correlation ID: 85a19fdf-03b2-4804-8987-49055663a3e5 Timestamp: 2024-09-13 03:44:03Z



官方的說明參考這篇
PnP Management Shell EntraID app is deleted : what should I do ? · Issue #4250

這邊有提到得的解是這篇
Register an Entra ID Application to use with PnP PowerShell | PnP PowerShell

不過這篇有幾個小插曲,那個英文分段分的不是很明確很容易誤以為整篇都在講同一個方法,其實總共有三個方法。

第二個坑是 $result = Register-PnPEntraIDApp -ApplicationName “PnP Rocks” -Tenant [yourtenant].onmicrosoft.com -OutPath c:\mycrtificates -DeviceLogin

這行代碼在 2.12 版本有 bug 是不能跑得,詳見這篇解法就是單純升級版本就修好了。


下面讓我們開始吧。




環境準備

要滿足兩個條件

  • PowerShell 7
  • Pnp.PowerShell 2.12.3

這是因為 Pnp.PowerShell 2 是面向PowerShell

下面請用管理員權限打開 PowerShell 5.1 執行

PowerShell 7 安裝指令
在 Windows 上安裝 PowerShell - PowerShell | Microsoft Learn

winget install --id Microsoft.Powershell --source winget

然後輸入 Pwsh 切換到 PowerShell 7 版本

pwsh

啟動之後檢查一下版本

$PSVersionTable

然後安裝 Pnp.PowerShell

Install-Module PnP.PowerShell -AllowPrerelease -Force -SkipPublisherCheck
Get-Module -Name PnP.PowerShell -ListAvailable

到這邊必要的環境就都安裝完成了




註冊應用程式

在開始前記得確保你打開的終端機是 PowerShell 7


最省力的辦法是用 PnP.PowerShell 社群幫你做的懶人包。
Register an Entra ID Application to use with PnP PowerShell | PnP PowerShell

這邊示範登入使用 CertificateBase64Encoded 所以沒有把證書存下來。
(事實上 CertificateBase64Encoded 就是證書檔案二進制,能還原的)

$result = Register-PnPEntraIDApp -ApplicationName PnP_Rocks -Tenant [你的租戶名].onmicrosoft.com -Interactive

預設的租戶名 xxx.onmicrosoft.com
方法1:從你的網站 https://[你的租戶名].sharepoint.com 網址上找到。
方法2:組織通常會新增自己的域名比如說 xxx@gmail.com 中的 gmail.com 也可以用。沒新增的話預設是 xxx@xxx.onmicrosoft.com 兩個長一個樣。

 

執行之後會出現內部的.NET的UI登入介面,請注意必須使用具網域管理員權限的帳號登入,總共會要求登入兩次

  • 第一次是創建應用程式。(這次其實不用權限)
  • 第二次是讓網域管理員承認應用程式權限

完成之後可以通過查看 $result 獲取證書的 Base64Encoded

$result

記得將他保存下來

$result > C:\PnP_Rocks_Certificate.txt

然後我們利用這個資訊登入

Connect-PnPOnline 'https://[你的租戶名].sharepoint.com/sites/[你的網站名]' -ClientId $result."AzureAppId/ClientId" -Tenant [你的租戶名].onmicrosoft.com -CertificateBase64Encoded $result.Base64Encoded

到這邊就登入成功了

切記這個權限超級超級大,Base64Encoded內容一定要保護好。


創建完成之後可以在這個網址找到自動建立的應用程式


在這裡可以編輯權限


 (這邊截圖不是照上面來的參考用而已,上面設定完權限不應是委託而是應用程式)




註冊應用程式2 (儲存證書)

重複的就不講了留最重要的代碼就好,這是會把證書儲存下來的方法。

mkdir d:\mycertificates
$result = Register-PnPEntraIDApp -ApplicationName PnP_Rocks -Tenant [你的租戶名].onmicrosoft.com -OutPath d:\mycertificates -Interactive

證書輸出之後把 pfx 安裝到”個人”,然後用下面的方式登入



Connect-PnPOnline 'https://[你的網站].sharepoint.com/sites/Maple' -ClientId $result."AzureAppId/ClientId" -Tenant [你的租戶名].onmicrosoft.com -Thumbprint $result."Certificate Thumbprint"

總之把他設定成不可匯出就不用被幹走了,剩下的證書封存的方式在自己琢磨一下。





參考網站

  1. 身份驗證 |PnP PowerShell
  2. [BUG] Register-PnPEntraIDApp Hanging · Issue #4260 · pnp/powershell (github.com)
  3. PnP Management Shell EntraID app is deleted : what should I do ? · Issue #4250 · pnp/powershell (github.com)