****** 2024.10.30 ********
Connect-PnPOnline コマンドの使用方法に変更がありました。詳細は以下のサイトをご覧ください。
Powershellを利用するとき対話方式というよりps1ファイルを実行する方が多いです。そんな中今までどおりps1ファイルを実行しようとするとエラーが発生するのです!
The sign-in name or password does not match one in the Microsoft account system
最初、アカウントとパスワードは間違っていないのになぜこんなエラーが出るのだろう?と思いました。原因はMicrosoft365アカウントを2要素認証に対応したためです。ですのでソースコードを変更しなければなりません。
こちらのサイトのソースコードを変更します。
PnP PowerShell を利用する
まず初めにPnP PowerShellをインストールします。PnP PowerShellとはオープンソースでコミュニティが提供するライブラリのことです。Microsoftから直接サポートを受けているわけではありませんが、Microsoftの関係者がかかわっているコミュニティのようです。
PnP PowerShellが用意しているコマンドレットを利用すれば2要素認証に対応したソースコードが書けます。インストールコマンドはこちら。
Install-Module -Name "PnP.PowerShell"
Import-Module PnP.PowerShell
しかーし、ここでエラーが発生しました。
Import-Module : ファイルまたはアセンブリ…、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
Import-Module ができません。なぜでしょう?それはPowerShellのバージョンが関係していました。
PowerShell 7 にバージョンアップする
最新のPnP PowerShell を動かすには PowerShell 7.2 以上にする必要がありました。私PCのバージョンは5でした。いつのまに7になったんや…。
手っ取り早くインストールするためパッケージ版のインストーラーを以下のサイトからゲットしました。
インストーラーをダウンロードして、実行するだけです。インストール中に謎のキャラクターが現れました。あんた誰や…PowerShellのキャラクターなんでしょうか?全く萌えないんですけど。(今は「萌え」という言葉は死語か?)
ソースコードを変更する
変更前ソースコードです。SharePoint Online に接続するまで記載します。
#.NET CSOM モジュールの読み込み
# SharePoint Online Client Components SDK をダウンロードする
# https://www.microsoft.com/en-us/download/details.aspx?id=42038
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#SharePointに接続する
$siteUrl = "https://xxxxxxxxx.sharepoint.com/sites/testportal"
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$accountName = "papa@papamamameyou.com"
$password = ConvertTo-SecureString -AsPlainText -Force "password"
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($accountName, $password)
$ctx.Credentials = $credentials
#リストの取得
$list = $ctx.Web.Lists.GetByTitle("UserInfoTable");
SharePoint Online Client Components SDK を利用して接続していました。今度はPnP PowerShellを利用します。変更後のソースコードはこちら。
#ログイン 2要素認証対応
$siteUrl = "https://xxxxxxxxx.sharepoint.com/sites/testportal"
Connect-PnPOnline -Interactive -Url $siteUrl
$ctx = Get-PnPContext
#リストの取得
$list = $ctx.Web.Lists.GetByTitle("UserInfoTable");
変更後ソースコードの最後
Disconnect-PnPOnline
すごくシンプルなコードになりましたね!Connect-PnPOnline コマンドで2要素認証対応画面が開きますのでアカウントやパスワードや2要素認証対応を行うと次へすすみます。
まとめ
PowerShell が6になり7になっていたこと知りませんでした。自動でアップグレードしてくれないかな…。
コメント