“sharepoint online management shell” をプログラムから実行する

Post on 16-Jul-2015

444 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

黒宮 浩介

2015/03/14

1

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

SPeed LAND 365

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

名古屋の某SIer に勤務

現在のお仕事

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

好きなもの

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

2

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

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

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

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

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

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

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

SharePoint Online 用 PowerShell モジュールの

「SharePoint Online Management Shell」を

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

いただく

4

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

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

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

1. 「SharePoint Online Management Shell」とは

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

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

4. まとめ

5

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

8

9

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

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

Credential “UserID@xxx.onmicrosoft.com”

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

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

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

> Disconnect-SPOService

10

SharePoint管理センター」のURL

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

11

12

13

“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

詳細 複雑 取り回し

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

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

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

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

誰が(どんなユーザ)

どれだけ(人数・規模)

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

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

16

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

◦ 引数

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

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

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

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

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

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

18

19

“-PageSize” を指定しない

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

20

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

ただ問題が…

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

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

21

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

⇒まず 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

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

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

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

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

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

23

.Net Framework の PowerShell クラスを利用

◦ System.Management.Automation 名前空間

25

PowerShell クラス

◦ 「Windows Management Framework」配下の

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

[注意]

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

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

26

27

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

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

¥WindowsPowerShell¥3.0)

28

ImportPSModuleメソッドで SPO M Shell の

モジュールをインポート

参照設定を追加

29

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

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

-DisableNameChecking;“

⇒ プログラム実体は Window PowerShell

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

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

30

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

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

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

コマンドを実行

31

+ 50

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

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

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

“Get-SPOExternalUser” の

文字列を作って、実行

32

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

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

◦ “Run SharePoint Online Management PowerShell command

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

33

35

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

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

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

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

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

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

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

36

SharePoint

Online

クライアント

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

② 管理データを取得

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

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

管理センター

ブラウザ

EXE, BAT

Winタスク

カスタムリスト

* Client-Side Object Model

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

取得できてしまう” 問題

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

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

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

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

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

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

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

⇒現実的には難しい…

37

38

http://sharepointmaniacs.com/archives/5728

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

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

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

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

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

注意点

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

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

39

【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

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

41

top related