Microsoft 365

SharePoint 2016 のサイトコレクション設定をPowerShellで取得すると特殊な形式で値が返る

SharePoint では GUI だけでなく、PowerShell コマンドで各種設定を行ったり、現在の設定値を確認することができます。認証を通し、既定のコマンドを叩くだけですので、お作法(とコマンド)さえ覚えてしまえば、小回りが聞くのでとても便利です。

ただ、これはある種の「裏口」ですので、時折、GUI から想定される挙動とは全く違う動きをすることがあり、そこでハマります。この投稿は先日遭遇した、そんな話です。

監査設定を PowerShell で取得すると…

[サイト コレクションの監査設定] の [ドキュメント、アイテム] [リスト、ライブラリ、サイト] の設定値をPowerShell コマンドで取得するには、下記を利用します。

$web =Get-SPweb -Identity <対象のサイトURL>
$web.Audit.EffectiveAuditMask

これで、現在の設定値を抜くことができるのですが、何故か SharePoint が返す値は「現在の設定値を数値に変換して、かつ複数設定されている場合はその合計値」という謎仕様なんですよね。そのため、実行結果だけみても、どのパラメータが有効化されているのかわからず、数字から「読み解く」必要があります。

パラメータと数値の対応一覧

下表がその設定値と、出力される数値の一覧です。

厄介なことに、そもそも GUI の設定項目と一対一になっていません。例えば、「アイテムのチェックインまたはチェックアウト」が有効化されていた場合、PowerShell スクリプトの戻り値は「CheckIn」+「CheckOut」で「3」になります。

All-1
CheckIn2
CheckOut1
ChildDelete64
Copy2048
Delete8
Move4096
None0
ProfileChange32
SchemaChange128
Search8192
SecurityChange256
Undelete512
Update16
View4
Workflow1024
参考:https://learn.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.spauditmasktype?view=sharepoint-server

地域の設定でも同様

同様に「地域の設定」の[稼働日の定義]も、PowerShell スクリプトの戻り値が「現在設定されているパラメータに対応する数値の合計値」になります。こちらはパラメータと対応値がかならず一対一なのでまだマシですが、結局、実際の設定値を推測して割り出すしかない、点は変わりません。

SP.RegionalSettings.workDays property (sp.js)
https://learn.microsoft.com/en-us/previous-versions/office/sharepoint-visio/jj246987(v=office.15))

何故こんな設計なんでしょうね

この記事の内容はあくまでオンプレミスの SharePoint 2016 環境で確認しています。SharePoint 2019、SharePoint Online については未確認なので、その点だけ留意してください。

しかし、一体、なんだって合算するのか…。一応、サイト移行で旧環境と新環境の設定に差異がないことを担保するなら「数値の一致」で良いので活用できそうです。でも、素直に複数値で返してくれたほうがモロモロ使いやすかったんですけどね。