41
黒宮 浩介 2015/03/14 1

“SharePoint Online Management Shell” をプログラムから実行する

Embed Size (px)

Citation preview

Page 1: “SharePoint Online Management Shell” をプログラムから実行する

黒宮 浩介

2015/03/14

1

Page 2: “SharePoint Online Management Shell” をプログラムから実行する

黒宮 浩介 (くろみや こうすけ) ※名古屋人です

SPeed LAND 365

https://www.facebook.com/kosuke.kuromiya

名古屋の某SIer に勤務

現在のお仕事

- SharePoint について色々やるエンジニア(導入・開発・保守 etc…)

好きなもの

- 映画、サブカル系幅広く、SKE48!

2

Page 3: “SharePoint Online Management Shell” をプログラムから実行する

本内容は、2015年3月時点で、私個人が調査および動作確認を

した結果に基づく見解であり、製品およびサービスの技術的な

保証をするものではありません。SharePoint Online

(Office365)の仕様などは今後変更される可能性があります。

また、私の属する組織等とは一切関係ありません。

本内容の操作等を実施された場合に発生したいかなる問題等に

関しても、一切の責任を負いません。

Page 4: “SharePoint Online Management Shell” をプログラムから実行する

SharePoint Online 用 PowerShell モジュールの

「SharePoint Online Management Shell」を

.Net のプログラム (C#) で実行する方法を知って

いただく

4

【なぜ “プログラムで実行する” のか】

標準の管理画面やPowerShell単体だと、実運用時では

機能不足となるケースがあるから

Page 5: “SharePoint Online Management Shell” をプログラムから実行する

1. 「SharePoint Online Management Shell」とは

2. PowerShell を C# から実行する

3. PowerShell と .Net を組み合わせた開発例

4. まとめ

5

Page 6: “SharePoint Online Management Shell” をプログラムから実行する
Page 7: “SharePoint Online Management Shell” をプログラムから実行する

SharePoint Online 専用の PowerShell モジュール

◦ コマンドラインからSharePoint Online を管理

◦ インストーラーをDLして、インストールするだけ

◦ SharePoint Online グローバル管理者のID・Passで接続

※【SharePoint Online Management Shell の概要】

http://office.microsoft.com/ja-jp/sharepoint-help/HA102915057.aspx

7

Page 8: “SharePoint Online Management Shell” をプログラムから実行する

8

Page 9: “SharePoint Online Management Shell” をプログラムから実行する

9

Page 10: “SharePoint Online Management Shell” をプログラムから実行する

/* SPOテナントに接続 */

Connect-SPOService -Url “https://xxx-admin.sharepoint.com” -

Credential “[email protected]

/* サイトコレクションの一覧詳細情報を取得 */

> Get-SPOSite -Detailed | Export-Csv C:¥Dev¥Get-SPOSite_Detailed.csv

/* SPOテナントから切断 */

> Disconnect-SPOService

10

SharePoint管理センター」のURL

出力結果をCSVファイルに出力

Page 11: “SharePoint Online Management Shell” をプログラムから実行する

11

Page 12: “SharePoint Online Management Shell” をプログラムから実行する

12

Page 13: “SharePoint Online Management Shell” をプログラムから実行する

13

Page 14: “SharePoint Online Management Shell” をプログラムから実行する

“Windows PowerShell で Office 365 を管理する6つの理由”

http://technet.microsoft.com/ja-jp/library/dn568034.aspx

1. 管理センターで取得できない「非表示」の情報を確認できる

2. Windows PowerShell でのみ構成可能な Office 365 機能がある

3. 一括操作の実行では Windows PowerShell が卓越している

4. Windows PowerShell はデータのフィルター処理に優れている

5. Windows PowerShell を使用するとデータを簡単に印刷・保存できる

6. Windows PowerShell を使用すると「製品間」管理が可能になる

14

詳細 複雑 取り回し

Page 15: “SharePoint Online Management Shell” をプログラムから実行する

「外部ユーザー」の管理機能が不十分

◦ サイトコレクションひとつずつ の確認画面しかない

=「テナント内の全ての外部ユーザー」を一括確認する画面が無い

◦ 管理者の立場としては…

誰が(どんなユーザ)

どれだけ(人数・規模)

どこに(サイト・コンテンツ種類) などを把握したい

Page 16: “SharePoint Online Management Shell” をプログラムから実行する

「外部ユーザーの管理」: [外部共有] > [サイト]

16

Page 17: “SharePoint Online Management Shell” をプログラムから実行する
Page 18: “SharePoint Online Management Shell” をプログラムから実行する

Get-SPOExternalUser [-SiteUrl] [-Position X] [-PageSize XX]

◦ 引数

- SiteUrl:対象のサイトコレクション

指定なし=全サイトコレクションを対象

-Position: 開始番号(何番目の外部ユーザーを取得するか)

-PageSize: いくつの外部ユーザーを取得するか

指定しない=最初(0番目)の一人だけ取得 [注意]

https://technet.microsoft.com/ja-jp/library/jj730438.aspx

18

Page 19: “SharePoint Online Management Shell” をプログラムから実行する

19

“-PageSize” を指定しない

⇒最初(0番目)の一人だけ取得

Page 20: “SharePoint Online Management Shell” をプログラムから実行する

20

“-PageSize”を指定する ⇒その分が取得できる

Page 21: “SharePoint Online Management Shell” をプログラムから実行する

ただ問題が…

◦ 一度に取得できる最大ユーザー数が 50 …

◦ MSDN等には書いてない(実行してみて初めて知る...orz

21

Page 22: “SharePoint Online Management Shell” をプログラムから実行する

「テナントの全ての外部ユーザーを取得する」には

⇒まず 0番目の外部ユーザーから50人分取る

Get-SPOExternalUser -Position 0 -PageSize 50

↓ if (50人取得してたら) ⇒ 0番目の外部ユーザーから50人分取る

Get-SPOExternalUser -Position 50 -PageSize 50

↓ if (50人取得してたら) ⇒ 50番目の外部ユーザーから50人分取る

Get-SPOExternalUser -Position 100 –PageSize 50

↓ if (50人取得してたら) ⇒ 100番目の外部ユーザーから50人分取る

→50人未満だったら「全部取得できた」と判断して終了

22

…という条件判断(=処理)が必要

Page 23: “SharePoint Online Management Shell” をプログラムから実行する

“ISEでスクリプトを書いて .ps1ファイル” が王道?

◦ インフラ技術者(ADやExchange)が得意?

身近に Shell が得意な人がいなかった(自分も…)

◦ プログラマーはいるので、C#で書ければいい

23

Page 24: “SharePoint Online Management Shell” をプログラムから実行する
Page 25: “SharePoint Online Management Shell” をプログラムから実行する

.Net Framework の PowerShell クラスを利用

◦ System.Management.Automation 名前空間

25

Page 26: “SharePoint Online Management Shell” をプログラムから実行する

PowerShell クラス

◦ 「Windows Management Framework」配下の

System.Management.Automation.DLL を参照追加する(C:¥Program Files (x86)¥Reference Assemblies¥Microsoft¥WindowsPowerShell¥3.0)

[注意]

ビルドの「構成マネージャー」でプラットフォームを、デフォルトの

「Any CPU」から「64bit」に変更する。

26

Page 27: “SharePoint Online Management Shell” をプログラムから実行する

27

System.Management.Automation.DLL を参照設定に追加

(C:¥Program Files (x86)¥Reference Assemblies¥Microsoft

¥WindowsPowerShell¥3.0)

Page 28: “SharePoint Online Management Shell” をプログラムから実行する

28

ImportPSModuleメソッドで SPO M Shell の

モジュールをインポート

参照設定を追加

Page 29: “SharePoint Online Management Shell” をプログラムから実行する

29

C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥powershell.exe -NoExit

-Command “Import-Module Microsoft.Online.SharePoint.PowerShell

-DisableNameChecking;“

⇒ プログラム実体は Window PowerShell

起動時に SPO M Shell のモジュールをインポート

(先ほどのプログラムでもこれと同じことを実装)

Page 30: “SharePoint Online Management Shell” をプログラムから実行する

30

SPOテナントに接続するコマンド

“Connect-SPOService” の文字列を作る

Invokeメソッド(引数=生成した文字列) で

コマンドを実行

Page 31: “SharePoint Online Management Shell” をプログラムから実行する

31

+ 50

“50人取得してたら、さらに次の(+50番

目から)50人分取る” の条件判断

外部ユーザー取得コマンド

“Get-SPOExternalUser” の

文字列を作って、実行

Page 32: “SharePoint Online Management Shell” をプログラムから実行する

32

取得した外部ユーザーをCSVに出力

Page 33: “SharePoint Online Management Shell” をプログラムから実行する

今回のプログラムはこの公開コードを参考にしました

◦ “Run SharePoint Online Management PowerShell command

programmatically”https://code.msdn.microsoft.com/office/Run-SharePoint-Online-8d1d0a3b

33

Page 34: “SharePoint Online Management Shell” をプログラムから実行する
Page 35: “SharePoint Online Management Shell” をプログラムから実行する

35

1. PowerShell & C# で管理データを取得

2. SPO のリストに取得したデータを保存

◦ 保存用のサイトとカスタムリストは事前に作成

◦ SPOリストへのアクセスはCSOM*を利用

*クライアントサイドオブジェクトモデル

管理者権限の無いユーザーにデータを見せられる

◦ サイトコレクション管理者にサイトの利用状況等を見せられる

Page 36: “SharePoint Online Management Shell” をプログラムから実行する

36

SharePoint

Online

クライアント

① SPOM Shell (by C#) でアクセス

② 管理データを取得

③ .Net CSOM* (by C#) で書き込み チームサイト

④ SPO管理者以外のユーザーが閲覧

管理センター

ブラウザ

EXE, BAT

Winタスク

カスタムリスト

* Client-Side Object Model

Page 37: “SharePoint Online Management Shell” をプログラムから実行する

“サイトのアクセス権限から削除した外部ユーザーが

取得できてしまう” 問題

◦ 「現に使用中の外部ユーザーを取得」ではない

「現に現在使用中の外部ユーザー」を取得する方法

1. 外部ユーザー取得コマンドで必ずサイトコレクション指定

ダメな可能性大(削除した外部ユーザーが取得できてしまうっぽい)

超困ってます…(滝汗) だれか助けてください…(マジで)

2. 外部ユーザーの削除をコマンドで完全削除

Remove-SPOExternalUser ※ただし内部UniqueIDを指定が必要

⇒現実的には難しい…

37

Page 38: “SharePoint Online Management Shell” をプログラムから実行する

38

http://sharepointmaniacs.com/archives/5728

Page 39: “SharePoint Online Management Shell” をプログラムから実行する

PowerShell をプログラムで実行する利点

◦ 管理処理(業務)をバッチジョブ等で自動化できる

人力による管理の削減 ←ある程度以上の大規模向け?

◦ さらにGUIツール化もできる(WinフォームやWPF)

技術スキルが無い人でも高度な管理が可能

注意点

◦ 管理データ&コマンドの仕様についての情報が少ない…

◦ 〃の仕様がいつの間にか変わる可能性がある?

39

Page 40: “SharePoint Online Management Shell” をプログラムから実行する

【SharePoint Online 管理シェルの概要】

http://office.microsoft.com/ja-jp/sharepoint-help/HA102915057.aspx

【PowerShell Class System.Management.Automation】https://msdn.microsoft.com/en-us/library/system.management.automation.powershell(v=vs.85).aspx

【PowerShell を C# から実行する】

http://tech.tanaka733.net/entry/2013/12/10/powershell-from-csharp

【Run SharePoint Online Management PowerShell command

programmatically】

https://code.msdn.microsoft.com/office/Run-SharePoint-Online-8d1d0a3b

【Windows PowerShell で Office 365 を管理する 6 つの理由

http://technet.microsoft.com/ja-jp/library/dn568034.aspx

【Office 365 の最新環境で PowerShell を使うための知識】

http://community.office365.com/ja-

jp/b/office_365_community_blog/archive/2014/05/09/using-powershell-in-the-new-

office-365.aspx 40

Page 41: “SharePoint Online Management Shell” をプログラムから実行する

ご清聴ありがとうございました

41