PowerShellでSharePointを    いじってみよう2012.3.31 JPSPS#2   アンクの山本
自己紹介• 山本太月 30代後半• 株式会社 ANK : SharePoint開発チーム• 元自動車整備士、妻1人娘2人• Twitter: @SharePoint_X• Facebook:https://www.facebook.com/sh...
今日の目標とお願い• まだ使ったことが無い方に   「何かPowerShellってよさそうだな」                     と感じてもらう• 少し触ったことがある方に      「それ使えるかも」                 ...
目次1. PowerShellの基本  1. ツール、環境  2. コマンド  3. 関数、コマンドレット2. PowerShellでSharePointの操作、アクセス  1.   SharePointのコマンド、オブジェクト  2.   構...
基本① ツール、環境• [Windows PowerShell]   – 全てのプログラム>アクセサリ>Windows PowerShell• [SharePoint 2010 管理シェル]   実体は> (SPhive)¥CONFIG¥POW...
基本② コマンド• まずは Get-Command、 Get-Help、Get-Member     gcm、man、gm• コマンド名は動詞(Verb)と名詞(Noun)  例) Get-Command –Noun SP* で、SharePo...
基本③ 関数・コマンドレット• Function、filter、{} (ScriptBlock)   – 引数の指定     function Get-Money( [string] $Target , [long] $Amount){…}  ...
PS と SharePoint① コマンド、オブジェクト• gcm -noun sp* で、名詞が SPで始まるコマンド  – 562個のコマンド(209個のNoun≒オブジェクト)• オブジェクトは.Net ObjectModelとイコールの...
PS と SharePoint② 構築のお手伝い(1)• インストール ~ 構成ウィザード     – 構成ウィザード(PSCONFIG*.exe)での操作は×        ※PowerShellコマンドは無いけどexe起動はできる! •  ...
PS と SharePoint② 構築のお手伝い(2)• UIから操作できない設定変更が可能 – WebProperties に独自の設定値を保存 – 特定の列の非表示化 (ShowInDispForm) – SPDが勝手に書き換えるXSLを生...
PS と SharePoint③ 運用のお手伝い(1)• バックアップ&リストア – STSADMの代替  [TexhNet] Stsadm と Windows PowerShell 間のマッピング• サービスアプリケーションの管理 – 死活監...
PS と SharePoint③ 運用のお手伝い(2)• ULS&イベント&IISのログ監視(収集) – Merge-SPLogFile    ファームの全SharePointサーバーのULSログを収集してマージ• 利用状況の監視• リストアイ...
PSとSharePoint④ 開発のお手伝い• 開発・検証環境の構築• ブラウザUIでは見られない情報の確認、変更 – 非表示列、非表示リストを一時的に表示 – 隠しフィーチャーの状態管理 – ファームソリューションの取得• テスト&デバッグ ...
Demo①Add-Typeで資産活用!
#Setting$targetSiteUrl = "http://spx01/"$targetListName = "TestBigList"# Add SharePoint snapinAdd-PSSnapin Microsoft.Share...
Demo②  リストの内容をクライアントから取得 そしてExcel出力!  (CSVじゃないよ)
# Setting ----------------------$siteURL = "https://jpspsp1.sharepoint.com"$listID = "{93B94918-C6BB-4550-BFC1-750CC5955B3...
# By ADO.net ----------------------# Create connection$conSP = New-Object System.Data.OleDb.OleDbConnection($connectionStr...
Demo③プッシュ配信
・サーバーに配置するScript(デモ時はコンテンツエディタで配置)<script type="text/javascript“>var maxId    = -1;           // これまでに取得したリストアイテムIDの最大値var...
Resources• SharePoint Management PowerShell Scripts   http://sharepointpsscripts.codeplex.com/• SharePoint Server 2010 Sea...
Communities• PowerShellCommunity.org  http://www.powershellcommunity.org/• PowerShell.com  – Library、 eBooks(free)、Ask the...
Upcoming SlideShare
Loading in …5
×

[東京] JapanSharePointGroup 勉強会 #2

2,837 views
2,753 views

Published on

株式会社アンクの山本さんのPowerShellセッション

Published in: Design
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,837
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
33
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

[東京] JapanSharePointGroup 勉強会 #2

  1. 1. PowerShellでSharePointを いじってみよう2012.3.31 JPSPS#2 アンクの山本
  2. 2. 自己紹介• 山本太月 30代後半• 株式会社 ANK : SharePoint開発チーム• 元自動車整備士、妻1人娘2人• Twitter: @SharePoint_X• Facebook:https://www.facebook.com/sharepointx
  3. 3. 今日の目標とお願い• まだ使ったことが無い方に 「何かPowerShellってよさそうだな」 と感じてもらう• 少し触ったことがある方に 「それ使えるかも」 という小ネタの提供• タイトルと内容に違和感がある方に 細かいところは気にしないで頂きたい• リアクションがあるとやりやすい
  4. 4. 目次1. PowerShellの基本 1. ツール、環境 2. コマンド 3. 関数、コマンドレット2. PowerShellでSharePointの操作、アクセス 1. SharePointのコマンド、オブジェクト 2. 構築編 for ITPro 3. 管理運用編 for Administrator 4. 開発編 for Developer3. デモ 1. .Net資産活用 2. リストアイテムをExcelへ(Office365対応) 3. プッシュ配信型のお知らせ(未完)
  5. 5. 基本① ツール、環境• [Windows PowerShell] – 全てのプログラム>アクセサリ>Windows PowerShell• [SharePoint 2010 管理シェル] 実体は> (SPhive)¥CONFIG¥POWERSHELL¥Registration¥sharepoint.ps1 $Host.Runspace.ThreadOptions = “ReuseThread“ Add-PsSnapin Microsoft.SharePoint.PowerShell• [Windows PowerShell ISE] ・・・ 統合開発環境 Import-Module Servermanager Add-WindowsFeature PowerShell-ISE• Profile でパーソナライズ $profile CurrentUserCurrentHost, CurrentUserAllHosts, AllUsersCurrentHost, AllUsersAllHosts• Set-ExecutionPolicy で実行ポリシーを指定 Restricted、 AllSigned 、 RemoteSigned、 Unrestricted
  6. 6. 基本② コマンド• まずは Get-Command、 Get-Help、Get-Member gcm、man、gm• コマンド名は動詞(Verb)と名詞(Noun) 例) Get-Command –Noun SP* で、SharePoint関連のコマンド一覧取得• コレクション操作 Select-Object(%、-Property、-First、-Last、etc.) Where-Object(?)、 Sort-Object、 Group-Object、 Measure-Object• 出力 Write-Host、 Write-EventLog、 Write-Progress、 Out-File、Export-Csv 、 Export-Clixml、 Out-Null、 Format-List、Format-Table、Out-GridView、 etc.
  7. 7. 基本③ 関数・コマンドレット• Function、filter、{} (ScriptBlock) – 引数の指定 function Get-Money( [string] $Target , [long] $Amount){…} $args と $input、param($City, $Street, $Address)• Script(*.ps1)、 Module(*.psm1) – 引数の指定 : $args と $input、param($City, $Street, $Address) – 呼び出し: “.”(ドット)or “&” + ファイルパス、Import-Module 関数は先(上)にインプリしないと使えません!• デバッグ、性能測定、ロギング – Write-Verbose と $VerbosePreference = "Continue” – Set-PSDebug、Set-PSBreakpoint、Get-PSCallStack – Start-Transcripts ・・・証跡、Measure-Command ・・・パフォーマンス測定• カスタムPSSanpin – Visual Studioで作成し、インストールする。(ので面倒)
  8. 8. PS と SharePoint① コマンド、オブジェクト• gcm -noun sp* で、名詞が SPで始まるコマンド – 562個のコマンド(209個のNoun≒オブジェクト)• オブジェクトは.Net ObjectModelとイコールのものが多い 例) $web = Get-SPWeb http://spx01/ $web.GetType().FullName > Microsoft.SharePoint.SPWeb• .Net OMとイコールのものはAPIをそのまま使用できる 例) $web.GetList(“/Lists/Announcements”)• .Net OMのAPI(メソッド)とPowerShellのコマンドの違い PowerShellのコマンドは一発屋! Set系のコマンドは Update が不要(なことが多い)• メモリー管理 – Dispose、Start-SPAssignment、 Stop-SPAssignment
  9. 9. PS と SharePoint② 構築のお手伝い(1)• インストール ~ 構成ウィザード – 構成ウィザード(PSCONFIG*.exe)での操作は× ※PowerShellコマンドは無いけどexe起動はできる! • ファームの作成 • サイトコレクションの作成 • 全体管理サイト作成 • サイトの設定 • サービスアプリケーション作成 • リストの作成 • Webアプリケーション作成 • 初期アイテムの投入 • コンテンツDB作成 – 基本的にはなんでもできる。が、デザインやページの編集は苦手。• [CodePlex] AutoSPInstaller http://autospinstaller.codeplex.com/• [MS-DownloadCenter] SPModule http://www.microsoft.com/download/en/details.aspx?id=6194
  10. 10. PS と SharePoint② 構築のお手伝い(2)• UIから操作できない設定変更が可能 – WebProperties に独自の設定値を保存 – 特定の列の非表示化 (ShowInDispForm) – SPDが勝手に書き換えるXSLを生で注入 – 任意のリストにイベントレシーバーを設定 – WebConfigの書き換え – コンテンツソースのクロールスケジュールをより詳 細に設定• [TechNet] ファームの構成設定を文書化する http://technet.microsoft.com/ja-jp/library/ff645391.aspx
  11. 11. PS と SharePoint③ 運用のお手伝い(1)• バックアップ&リストア – STSADMの代替 [TexhNet] Stsadm と Windows PowerShell 間のマッピング• サービスアプリケーションの管理 – 死活監視、再起動、トポロジーの変更 リモーティング:• ジョブ&バッチ処理 – タスクスケジューラー [CodePlex] SharePoint PowerShell Timer Jobs http://sppowershelltimerjob.codeplex.com/
  12. 12. PS と SharePoint③ 運用のお手伝い(2)• ULS&イベント&IISのログ監視(収集) – Merge-SPLogFile ファームの全SharePointサーバーのULSログを収集してマージ• 利用状況の監視• リストアイテムの操作、ドキュメントの管理、 権限管理• メール送信 – 例)昨日投稿されたアイテム一覧を毎朝配信
  13. 13. PSとSharePoint④ 開発のお手伝い• 開発・検証環境の構築• ブラウザUIでは見られない情報の確認、変更 – 非表示列、非表示リストを一時的に表示 – 隠しフィーチャーの状態管理 – ファームソリューションの取得• テスト&デバッグ – 大量データやイレギュラーデータの作成• コンソールアプリの代わりに – Add-Type コマンド最強
  14. 14. Demo①Add-Typeで資産活用!
  15. 15. #Setting$targetSiteUrl = "http://spx01/"$targetListName = "TestBigList"# Add SharePoint snapinAdd-PSSnapin Microsoft.SharePoint.PowerShell Demo① - (1/1)$src = @"using Microsoft.SharePoint;namespace JpSps{ public class ItemGetter { public static SPListItemCollection gets(SPList list, uint rowNum) { SPQuery qry = new SPQuery(); qry.RowLimit = rowNum; return list.GetItems(qry); } }}"@$asmName = [Microsoft.SharePoint.SPWeb].Assembly.FullName# Regist classAdd-Type -TypeDefinition $src -ReferencedAssemblies $asmName# Get SPList$web = Get-SPWeb $targetSiteUrl$list = $web.Lists[$targetListName][JpSps.ItemGetter]::gets( $list, 100 ) | Select-Object -Property ID, Title, @{Name="作成者"; Expression={($_["作成者"].Split(";")[1]).TrimStart("#")}} ` | Out-GridView -Title "Demo successful"$web.Dispose()
  16. 16. Demo② リストの内容をクライアントから取得 そしてExcel出力! (CSVじゃないよ)
  17. 17. # Setting ----------------------$siteURL = "https://jpspsp1.sharepoint.com"$listID = "{93B94918-C6BB-4550-BFC1-750CC5955B39}"$query = "SELECT TOP 100 * FROM list"# Constants Demo② - (1/2)Set-Variable -name connectionStringForSP -value "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=$siteURL;LIST=$listID;" ` -option constant# By ADO ----------------------# Create Connection$cn = New-Object -ComObject ADODB.Connection$cn.Open($connectionStringForSP)# Get Recordset$rs = $cn.Execute($query)# Fetch the data[Array]$retTable = @()$rs.MoveFirst()Do { $objRow = New-Object -TypeName PSObject # Field to Member $rs.Fields ` | ForEach-Object{ ` Add-Member -MemberType NoteProperty -InputObject $objRow ` -Name $_.Name -Value $rs.Fields.Item($_.Name).Value ` } $retTable += $objRow $rs.MoveNext()} Until ($rs.EOF -eq $True)# Finalize$rs.Close()$cn.Close()# Show the stolen data.$retTable | Out-GridView
  18. 18. # By ADO.net ----------------------# Create connection$conSP = New-Object System.Data.OleDb.OleDbConnection($connectionStringForSP)$conSP.Open()# Create data adapter Demo② - (2/2)$daSP = New-Object System.Data.OleDb.OleDbDataAdapter($query, $conSP)# Create datatable (container of the stolen data)$dtSP = New-Object System.Data.DataTable# Steal the data$daSP.Fill($dtSP) > $null# Finalize$conSP.Close()# Show the stolen data.$dtSP | Out-GridView# Export to Xlsx ----------------------# Additional Setting --------#$pathXls = "C:¥Data_{0:yyyyMMdd_HHmmss}.xlsx" -f (Get-Date)$pathXls = "C:¥Users¥Tatsuki¥Dropbox¥JPSPS¥Data_{0:yyyyMMdd_HHmmss}.xlsx" -f (Get-Date)# Open connection$conSP.Open()# Create command(New-Object System.Data.OleDb.OleDbCommand( "SELECT TOP 5500 * INTO [Excel 12.0 Xml;Database=$pathXls].[fromSP] from [list]" ` ,$conSP)).ExecuteNonQuery()# Finalize$conSP.Close()
  19. 19. Demo③プッシュ配信
  20. 20. ・サーバーに配置するScript(デモ時はコンテンツエディタで配置)<script type="text/javascript“>var maxId = -1; // これまでに取得したリストアイテムIDの最大値var ListName = "PushAlerts"; // リスト表示名var pollingInterval = 10000; // 繰り返しインターバル(On-Premisesでは大き目、Office365では小さ目が吉) Demo③ - (1/1)var context; var web; var list; var items; var item; var currentId; var currentTitle; var currentBody;var itemDic = {}; var currentStatusId = "";function startGetAllItems() { // 定期的にリストからアイテムを取得 setInterval(function (){ items = null; itemDic = {}; context = SP.ClientContext.get_current(); web = context.get_web(); list = web.get_lists().getByTitle(ListName); items = list.getItems(SP.CamlQuery.createAllItemsQuery()); // すみません、このあたり手抜きです(汗 context.load(items); context.executeQueryAsync(Function.createDelegate(this, getAllItemsSuccess), null); }, pollingInterval );}function getAllItemsSuccess(sender, args) { var _maxId = 0; var listEnumerator = items.getEnumerator(); while (listEnumerator.moveNext()) { // 取得したアイテムをDictionaryに入れつつ最大(=最新)のIDを調査 item = listEnumerator.get_current(); ※この例では、 「Body」という名の currentId = item.get_item("ID"); currentBody = item.get_item("Body"); 列を持つ、「PushAlerts」という名の if(_maxId < currentId){_maxId = currentId} } itemDic[currentId] = currentBody リストを作成し、アイテムを追加す if(maxId != -1 && maxId < _maxId){ ることでBoby列の内容がPush風に // 最大のIDが前回取得時を上回っていた場合は、ステータスを更新 if(currentStatusId != "") SP.UI.Status.removeStatus(currentStatusId); 配信されます。 currentStatusId = SP.UI.Status.addStatus(itemDic[_maxId]); } 全然PowerShellと絡めてない(汗 maxId = _maxId; // 最大のIDを保持}_spBodyOnLoadFunctionNames.push("startGetAllItems"); // ページ読込み時に起動</script>
  21. 21. Resources• SharePoint Management PowerShell Scripts http://sharepointpsscripts.codeplex.com/• SharePoint Server 2010 Search: Windows PowerShell cmdlets http://social.technet.microsoft.com/wiki/contents/articles/ 204.sharepoint-server-2010-search-windows-powershell-cmdlets-en-us.aspx• Windows PowerShell compiled Help for SharePoint Server 2010 http://www.microsoft.com/download/en/details.aspx?id=7879• The Windows PowerShell Toolbox http://technet.microsoft.com/en-us/scriptcenter/ee861518• Windows PowerShell Quick Reference http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7097• SharePoint Server 2010 向けの Windows PowerShell http://technet.microsoft.com/ja-jp/library/ee662539.aspx• Stsadm と Windows PowerShell 間のマッピング http://technet.microsoft.com/ja-jp/library/ff621084.aspx
  22. 22. Communities• PowerShellCommunity.org http://www.powershellcommunity.org/• PowerShell.com – Library、 eBooks(free)、Ask the Experts – Today’s tips http://powershell.com/• PowerShell Community Groups http://powershellgroup.org/

×