からめもぶろぐ。

SharePoint が得意なフレンズなんだね!すごーい!

SharePoint Online Management Shell がインストールする CSOM がイケてない件について

発端は Japan SharePoint Support Team Blog の記事です。

PowerShell で SharePoint CSOM を使用する際の Tips – Japan SharePoint Support Team Blog

SharePoint Online Management Shell をインストールすることで、CSOM のモジュールもインストールされます。

はい、確かに SharePoint Online Management Shell をインストールすると、CSOM が使えるようになります。ただし、SharePoint Online Management Shell が入れる CSOM はかなりイケてないので、個人的にはまったところを含めて紹介したいと思います。なお、以下はすべて 2018/03/29 時点の情報であり、今後変更される可能性があります。

モジュールが不完全

SharePoint Online Management Shell に含まれる CSOM の dll は以下の通りです。

  • Microsoft.Online.SharePoint.Client.Tenant.dll
  • Microsoft.SharePoint.Client.dll
  • Microsoft.SharePoint.Client.Runtime.dll

一方、CSOM の NuGet パッケージ (Microsoft.SharePointOnline.CSOM の .NET 4.5 版) に含まれる dll は以下の通りです。

  • Microsoft.Office.Client.Policy.dll
  • Microsoft.Office.Client.TranslationServices.dll
  • Microsoft.Office.SharePoint.Tools.dll
  • Microsoft.Online.SharePoint.Client.Tenant.dll
  • Microsoft.ProjectServer.Client.dll
  • Microsoft.SharePoint.Client.dll
  • Microsoft.SharePoint.Client.DocumentManagement.dll
  • Microsoft.SharePoint.Client.Publishing.dll
  • Microsoft.SharePoint.Client.Runtime.dll
  • Microsoft.SharePoint.Client.Runtime.Windows.dll
  • Microsoft.SharePoint.Client.Search.Applications.dll
  • Microsoft.SharePoint.Client.Search.dll
  • Microsoft.SharePoint.Client.Taxonomy.dll
  • Microsoft.SharePoint.Client.UserProfiles.dll
  • Microsoft.SharePoint.Client.WorkflowServices.dll

明らかに足りない。確かに Microsoft.SharePoint.Client.dll と Microsoft.SharePoint.Client.Runtime.dll がコア機能をすべて持っているので、だいたいのことは事足りてしまうのですが、検索やソーシャル、管理されたメタデータといった機能が入っていないので、突然困ることになります。

謎のバージョンを GAC に突っ込む

SharePoint Online Management Shell の CSOM のアセンブリ バージョンは 16.0.7414.1200 です。そして、NuGet の CSOM のバージョンは 16.1.7414.1200 です。これだけならまだ困らないのですが、SharePoint Online Management Shell はなんと 16.0.7414.1200 の dll を GAC に入れてしまいます。そうすると、NuGet の CSOM でしか存在しない dll を読み込んだときに、アセンブリ バージョンの不整合が起こり、予期しないエラーが発生します。具体的には Assembly.LoadWithPartialName で dll を読み込んだときなどに発生します。*1
前掲の記事でも以下のコメントがあるのは、こういう状況が発生することを認識しているためと思われます。

なお、SharePoint Online Management Shell と SharePoint Online Client Components SDK などを同時にインストールした場合エラーが発生する可能性があるため、いずれかのみのインストールとしてください。

ともあれ、不完全に GAC に突っ込む動作はかなりいけてないので、何らかの改善を望みたいところです。せめてアセンブリ バージョンを合わせてほしい…。

*1:Assembly.LoadWithPartialName は obsolete なので使うなって話なのですが。

AppVeyor で PowerShell Core モジュールをデプロイする

AppVeyor で .NET Core のビルドができると聞いたので、PowerShell Core モジュールのビルドもできるんじゃね?ということで試してみました。

Environment

公式のドキュメントによれば [Visual Studio 2015] または [Visual Studio 2017] であれば .NET Core SDK 2.0 がサポートされます。特に [Visual Studio 2015] を選択する積極的な理由はないので [Visual Studio 2017] を選択します。

www.appveyor.com

Build

[MSBUILD] は使えないので [SCRIPT]-[CMD] を選択して dotnet コマンドを実行します。通常の .NET Core アプリケーションとは違い、PowerShell Core の場合、NuGet パッケージ ソースに MyGet を指定する必要があるので、追加で指定します。

dotnet restore --source https://api.nuget.org/v3/index.json --source https://powershell.myget.org/F/powershell-core/api/v3/index.json
dotnet build --configuration Release

Deployment

PowerShell Gallery への発行を自動化します。Publish-Module を実行するだけですが、必ず [SCRIPT]-[PS CORE] を選択する必要があります。[SCRIPT]-[PS] (Windows PowerShell) だと Publish-Module の前提条件チェックでエラーになります。

Publish-Module -Name <Path> -NuGetApiKey <API Key>

SPClientCore 1.0 をリリースしました

SPClientCore 1.0 をリリースしました 。

github.com

PowerShell Gallery からインストールできます。

www.powershellgallery.com

使用できるコマンドの一覧は以下の通りです。

PS C:\> Get-Command -Module SPClientCore

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Add-SPRoleAssignment                               1.0.0      SPClientCore
Cmdlet          Add-SPViewField                                    1.0.0      SPClientCore
Cmdlet          Connect-SPOnline                                   1.0.0      SPClientCore
Cmdlet          Connect-SPServer                                   1.0.0      SPClientCore
Cmdlet          Copy-SPFile                                        1.0.0      SPClientCore
Cmdlet          Find-SPAttachment                                  1.0.0      SPClientCore
Cmdlet          Find-SPContentType                                 1.0.0      SPClientCore
Cmdlet          Find-SPField                                       1.0.0      SPClientCore
Cmdlet          Find-SPFile                                        1.0.0      SPClientCore
Cmdlet          Find-SPFileVersion                                 1.0.0      SPClientCore
Cmdlet          Find-SPFolder                                      1.0.0      SPClientCore
Cmdlet          Find-SPGroup                                       1.0.0      SPClientCore
Cmdlet          Find-SPList                                        1.0.0      SPClientCore
Cmdlet          Find-SPListItem                                    1.0.0      SPClientCore
Cmdlet          Find-SPRecycleBinItem                              1.0.0      SPClientCore
Cmdlet          Find-SPRoleAssignment                              1.0.0      SPClientCore
Cmdlet          Find-SPRoleDefinition                              1.0.0      SPClientCore
Cmdlet          Find-SPUser                                        1.0.0      SPClientCore
Cmdlet          Find-SPView                                        1.0.0      SPClientCore
Cmdlet          Find-SPWeb                                         1.0.0      SPClientCore
Cmdlet          Find-SPWebTemplate                                 1.0.0      SPClientCore
Cmdlet          Get-SPAttachment                                   1.0.0      SPClientCore
Cmdlet          Get-SPContentType                                  1.0.0      SPClientCore
Cmdlet          Get-SPField                                        1.0.0      SPClientCore
Cmdlet          Get-SPFile                                         1.0.0      SPClientCore
Cmdlet          Get-SPFileVersion                                  1.0.0      SPClientCore
Cmdlet          Get-SPFolder                                       1.0.0      SPClientCore
Cmdlet          Get-SPGroup                                        1.0.0      SPClientCore
Cmdlet          Get-SPList                                         1.0.0      SPClientCore
Cmdlet          Get-SPListItem                                     1.0.0      SPClientCore
Cmdlet          Get-SPRecycleBinItem                               1.0.0      SPClientCore
Cmdlet          Get-SPRoleAssignment                               1.0.0      SPClientCore
Cmdlet          Get-SPRoleDefinition                               1.0.0      SPClientCore
Cmdlet          Get-SPSite                                         1.0.0      SPClientCore
Cmdlet          Get-SPUser                                         1.0.0      SPClientCore
Cmdlet          Get-SPUserProfile                                  1.0.0      SPClientCore
Cmdlet          Get-SPView                                         1.0.0      SPClientCore
Cmdlet          Get-SPWeb                                          1.0.0      SPClientCore
Cmdlet          Get-SPWebTemplate                                  1.0.0      SPClientCore
Cmdlet          Move-SPFile                                        1.0.0      SPClientCore
Cmdlet          Move-SPViewField                                   1.0.0      SPClientCore
Cmdlet          New-SPAttachment                                   1.0.0      SPClientCore
Cmdlet          New-SPContentType                                  1.0.0      SPClientCore
Cmdlet          New-SPField                                        1.0.0      SPClientCore
Cmdlet          New-SPFile                                         1.0.0      SPClientCore
Cmdlet          New-SPFolder                                       1.0.0      SPClientCore
Cmdlet          New-SPGroup                                        1.0.0      SPClientCore
Cmdlet          New-SPList                                         1.0.0      SPClientCore
Cmdlet          New-SPListItem                                     1.0.0      SPClientCore
Cmdlet          New-SPRoleDefinition                               1.0.0      SPClientCore
Cmdlet          New-SPUser                                         1.0.0      SPClientCore
Cmdlet          New-SPView                                         1.0.0      SPClientCore
Cmdlet          New-SPWeb                                          1.0.0      SPClientCore
Cmdlet          Open-SPFile                                        1.0.0      SPClientCore
Cmdlet          Remove-SPAttachment                                1.0.0      SPClientCore
Cmdlet          Remove-SPContentType                               1.0.0      SPClientCore
Cmdlet          Remove-SPField                                     1.0.0      SPClientCore
Cmdlet          Remove-SPFile                                      1.0.0      SPClientCore
Cmdlet          Remove-SPFileVersion                               1.0.0      SPClientCore
Cmdlet          Remove-SPFolder                                    1.0.0      SPClientCore
Cmdlet          Remove-SPGroup                                     1.0.0      SPClientCore
Cmdlet          Remove-SPList                                      1.0.0      SPClientCore
Cmdlet          Remove-SPListItem                                  1.0.0      SPClientCore
Cmdlet          Remove-SPRecycleBinItem                            1.0.0      SPClientCore
Cmdlet          Remove-SPRoleAssignment                            1.0.0      SPClientCore
Cmdlet          Remove-SPRoleDefinition                            1.0.0      SPClientCore
Cmdlet          Remove-SPUser                                      1.0.0      SPClientCore
Cmdlet          Remove-SPView                                      1.0.0      SPClientCore
Cmdlet          Remove-SPViewField                                 1.0.0      SPClientCore
Cmdlet          Remove-SPWeb                                       1.0.0      SPClientCore
Cmdlet          Restore-SPFileVersion                              1.0.0      SPClientCore
Cmdlet          Restore-SPRecycleBinItem                           1.0.0      SPClientCore
Cmdlet          Select-SPWeb                                       1.0.0      SPClientCore
Cmdlet          Start-SPRoleInheritance                            1.0.0      SPClientCore
Cmdlet          Stop-SPRoleInheritance                             1.0.0      SPClientCore
Cmdlet          Update-SPContentType                               1.0.0      SPClientCore
Cmdlet          Update-SPField                                     1.0.0      SPClientCore
Cmdlet          Update-SPFile                                      1.0.0      SPClientCore
Cmdlet          Update-SPFolder                                    1.0.0      SPClientCore
Cmdlet          Update-SPGroup                                     1.0.0      SPClientCore
Cmdlet          Update-SPList                                      1.0.0      SPClientCore
Cmdlet          Update-SPListItem                                  1.0.0      SPClientCore
Cmdlet          Update-SPRoleDefinition                            1.0.0      SPClientCore
Cmdlet          Update-SPUser                                      1.0.0      SPClientCore
Cmdlet          Update-SPView                                      1.0.0      SPClientCore
Cmdlet          Update-SPWeb                                       1.0.0      SPClientCore

SharePoint Framework 1.4.1 で追加された MSGraphClient を試してみた

SharePoint Framework 1.4.1 がリリースされ、プレビューですが Graph API をサポートしました。

Office Dev Center - Now Releasing – Enhanced preview support for Microsoft Graph API calls from SharePoint Framework

これまでのバージョンでは、GraphHttpClient によって限定的な Graph API の呼び出しがサポートされてきましたが、今回のリリースでは、新しい SharePoint 管理センターから承認することで、任意のアクセス許可を与えることができます。
今回のリリースで追加されたのは MSGraphClient という名前になっており、モジュールも @microsoft/sp-client-preview になっています。

docs.microsoft.com

追加のアクセス許可を取得する場合は、package-solution.json にアクセス許可を指定します。アプリ カタログ サイトに登録したときに、承認待ち状態でアプリが登録され、管理者が承認すると許可された API が使用できるようになります。

docs.microsoft.com

ちなみに、残念ながら GraphHttpClient とは違い OAuth で新しいウィンドウを開く動作となっていますが、ポップアップ ブロックが有効になっているときに親切にも教えてくれるようになりました (/・ω・)/