XML文書をPowerShellでSharePointにインポートすることに失敗しました

[前回の記事](https://qiita.com/NomuSunder/items/5df6e5950597d2c0e097)で、Notes文書をXMLファイルとして書き出しすることができたので、このXMLファイルをPowerShellでSharePointに取り込みできれば、Notes→SharePointのマイグレーションができると思ったのですが…。

# SharePointでの取込処理
最初に試したのは、Add-PSSnapin コマンドレットでした。

>[MicroSoftの説明より](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/add-pssnapin?view=powershell-5.1)
>The Add-PSSnapin cmdlet adds registered Windows PowerShell snap-ins to the current session. After the snap-ins are added, you can use the cmdlets and providers that the snap-ins support in the current session.
>To add the snap-in to all future Windows PowerShell sessions, add an Add-PSSnapin command to your Windows PowerShell profile.

ソースコードを書いて実行した結果、Add-PSSnapin コマンドレットは、SharePointが端末にインストールされていないと利用できないことが判明しました。（私が利用しているのはSharePointOnline）


1行目でコケたコードですが、SharePointがインストールされている端末を使ったときの役に立つかもしれないので、備忘としてサンプルコードだけ置いておきます。

#PowerShellのXML取込処理サンプルコード
```PowerShell
#SharePointを利用するスナップイン
Add-PSSnapin "Microsoft.SharePoint.PowerShell"

#Const
$SiteURL="https://xxxxx.sharepoint.com/"
$ListName="TestList"
$XMLFile ="C:\Temp\Document.xml"

$web = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)

Try{
    #SharePoint呼び出し
    $web = Get-SPWeb $SiteURL
    $ProjectList = $web.Lists[$ListName]

    #XMLファイル呼び出し
    [xml]$ProjectXmlFile = Get-Content $XMLFile

    #XMLのアイテムを取得
    Foreach ($XMLProject in $ProjectXmlFile.projects.project)
    {
        $NewProject = $ProjectList.Items.Add()
        $NewProject["Uname"] = $XMLProject.Uname
        #$NewProject["xxx01"] = $XMLProject.xxx01
    
        $NewProject.Update()
  
        Write-Host "インポート成功"
    }
    $Ctx.ExecuteQuery()
}
Catch {
        write-host -f Red "インポートエラー" $_.Exception.Message
}
```

# SharePointOnlineでの取込処理
MicroSoft の[「SharePoint Online 管理シェルを使用して作業を開始する」](https://docs.microsoft.com/ja-jp/powershell/sharepoint/sharepoint-online/connect-sharepoint-online?view=sharepoint-ps)を参考にして、最新の SharePoint Online 管理シェルをインストールして、SharePoint Online に接続……という方法を試したのですが

>Connect-SPOService -Url https://xxxxxx.sharepoint.com -Credential Yamada-san@xxxxxx.onmicrosoft.com

 と入力をすると
>Connect-SPOService : Current site is not a tenant administration site.

が返ってきます。

色々と調べた結果、.sharepoint.com の前に「-admin」のパラメータを付ければ良いということがわかったのですが…。

> Connect-SPOService -Url https://xxxxxx-admin.sharepoint.com -Credential Yamada-san@xxxxxx.onmicrosoft.com
Connect-SPOService : リモート サーバーがエラーを返しました: (401) 許可されていません

という結果でした。
私が使用しているO365アカウントは一般ユーザー用で、管理者用ではないため、PowerPointでSharePointOnlineでの接続はできないようです。

#EXCELでの取込処理
[MicroSoft 「Excel の XML の概要」](https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE-xml-%E3%81%AE%E6%A6%82%E8%A6%81-f11faa7e-63ae-4166-b3ac-c9e9752a7d80#bmkey_xml_and_excel_scenarios)
を参考にして、EXCELの[開発]タブからXMLファイルをインポートすることはできたのですが、以下の問題がありました。
* アイテムがNULLの場合、アイテム名がデータと判断され、複数行となってしまう。
* 日付時刻が数値データとして取り込まれる。

取り込んだExcelファイルの状態
![XML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/23d3d641-fde6-d989-5abc-5b547e937f9d.png)
また、XMLファイルの冒頭に<?xml version="1.0" encoding="UTF-8" standalone="no" ?>を記述しないと、アイテムの値が日本語の時に「テキストの内容に無効な値がありました」エラーが発生して、データの取込が開始されません。

今回は成功しませんでしたが、何かの役に立つかと思って、記録として残しておきます。なにか、助言がありましたら、ご指摘いただけるとありがたいです。