SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
PowerShellでSharePointを
    いじってみよう


2012.3.31 JPSPS#2   アンクの山本
自己紹介
• 山本太月 30代後半

• 株式会社 ANK : SharePoint開発チーム


• 元自動車整備士、妻1人娘2人

• Twitter: @SharePoint_X

• Facebook:https://www.facebook.com/sharepointx
今日の目標とお願い
• まだ使ったことが無い方に

   「何かPowerShellってよさそうだな」
                     と感じてもらう
• 少し触ったことがある方に
      「それ使えるかも」
                 という小ネタの提供
• タイトルと内容に違和感がある方に
      細かいところは気にしないで頂きたい
• リアクションがあるとやりやすい
目次
1. PowerShellの基本
  1. ツール、環境
  2. コマンド
  3. 関数、コマンドレット
2. PowerShellでSharePointの操作、アクセス
  1.   SharePointのコマンド、オブジェクト
  2.   構築編 for ITPro
  3.   管理運用編 for Administrator
  4.   開発編 for Developer
3. デモ
  1. .Net資産活用
  2. リストアイテムをExcelへ(Office365対応)
  3. プッシュ配信型のお知らせ(未完)
基本① ツール、環境
• [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
基本② コマンド
• まずは 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.
基本③ 関数・コマンドレット
• 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で作成し、インストールする。(ので面倒)
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
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
PS と SharePoint② 構築のお手伝い(2)
• UIから操作できない設定変更が可能
 – WebProperties に独自の設定値を保存
 – 特定の列の非表示化 (ShowInDispForm)
 – SPDが勝手に書き換えるXSLを生で注入
 – 任意のリストにイベントレシーバーを設定
 – WebConfigの書き換え
 – コンテンツソースのクロールスケジュールをより詳
   細に設定

• [TechNet] ファームの構成設定を文書化する
 http://technet.microsoft.com/ja-jp/library/ff645391.aspx
PS と SharePoint③ 運用のお手伝い(1)
• バックアップ&リストア
 – STSADMの代替
  [TexhNet] Stsadm と Windows PowerShell 間のマッピング


• サービスアプリケーションの管理
 – 死活監視、再起動、トポロジーの変更
   リモーティング:


• ジョブ&バッチ処理
 – タスクスケジューラー
    [CodePlex] SharePoint PowerShell Timer Jobs
   http://sppowershelltimerjob.codeplex.com/
PS と SharePoint③ 運用のお手伝い(2)
• ULS&イベント&IISのログ監視(収集)
 – Merge-SPLogFile
    ファームの全SharePointサーバーのULSログを収集してマージ


• 利用状況の監視

• リストアイテムの操作、ドキュメントの管理、
  権限管理

• メール送信
 – 例)昨日投稿されたアイテム一覧を毎朝配信
PSとSharePoint④ 開発のお手伝い
• 開発・検証環境の構築

• ブラウザUIでは見られない情報の確認、変更
 – 非表示列、非表示リストを一時的に表示
 – 隠しフィーチャーの状態管理
 – ファームソリューションの取得

• テスト&デバッグ
 – 大量データやイレギュラーデータの作成

• コンソールアプリの代わりに
 – Add-Type コマンド最強
Demo①


Add-Typeで資産活用!
#Setting
$targetSiteUrl = "http://spx01/"
$targetListName = "TestBigList"

# Add SharePoint snapin
Add-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 class
Add-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()
Demo②


  リストの内容を
クライアントから取得
 そしてExcel出力!
  (CSVじゃないよ)
# 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
# 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()
Demo③


プッシュ配信
・サーバーに配置する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>
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
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/

Mais conteúdo relacionado

Mais procurados

[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズJun Terashita
 
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門だいすけ さとう
 
Jetpack datastore入門
Jetpack datastore入門Jetpack datastore入門
Jetpack datastore入門furusin
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareerKyosuke MOROHASHI
 
Search on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 SpringSearch on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 SpringEiji Shinohara
 
Getting Started Japanese Search and Calculate Similarity with Apache Lucene
Getting Started Japanese Search and Calculate Similarity with Apache LuceneGetting Started Japanese Search and Calculate Similarity with Apache Lucene
Getting Started Japanese Search and Calculate Similarity with Apache LuceneEiji Shinohara
 
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所Yu Sugawara
 
R6 classes
R6 classesR6 classes
R6 classeshiroki84
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装__nakamichi__
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことdcubeio
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディングAkihiro Okuno
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo dbYuji Isobe
 
5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.com5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.comKenta Tsuji
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 

Mais procurados (20)

swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ[Alfresco]ドキュメントライブラリのUIカスタマイズ
[Alfresco]ドキュメントライブラリのUIカスタマイズ
 
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
Jetpack datastore入門
Jetpack datastore入門Jetpack datastore入門
Jetpack datastore入門
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareer
 
実践Realm
実践Realm実践Realm
実践Realm
 
Search on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 SpringSearch on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 Spring
 
Teclab3
Teclab3Teclab3
Teclab3
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Getting Started Japanese Search and Calculate Similarity with Apache Lucene
Getting Started Japanese Search and Calculate Similarity with Apache LuceneGetting Started Japanese Search and Calculate Similarity with Apache Lucene
Getting Started Japanese Search and Calculate Similarity with Apache Lucene
 
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
 
R6 classes
R6 classesR6 classes
R6 classes
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディング
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
 
5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.com5分でわかったつもりになるParse.com
5分でわかったつもりになるParse.com
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 

Semelhante a [東京] JapanSharePointGroup 勉強会 #2

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料FwardNetwork
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)Fujio Kojima
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter IntegrationKazuki Nakajima
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
初めての Data api
初めての Data api初めての Data api
初めての Data apiYuji Takayama
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-EdoYuji Takayama
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとかyouku
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a NutshellTsuyoshi Miyake
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applicationstotty jp
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発Nomura Yusuke
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?Hiroshi Tokumaru
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...Shotaro Suzuki
 

Semelhante a [東京] JapanSharePointGroup 勉強会 #2 (20)

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-Edo
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a Nutshell
 
test
testtest
test
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
 
後期02
後期02後期02
後期02
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 

Mais de Atsuo Yamasaki

二求の塾 プログラミング講座(2019-08-10)
二求の塾 プログラミング講座(2019-08-10)二求の塾 プログラミング講座(2019-08-10)
二求の塾 プログラミング講座(2019-08-10)Atsuo Yamasaki
 
二求の塾 プログラミング講座(2019-07-27)
二求の塾 プログラミング講座(2019-07-27)二求の塾 プログラミング講座(2019-07-27)
二求の塾 プログラミング講座(2019-07-27)Atsuo Yamasaki
 
仙台IT文化祭 学生&社会人におくる 「僕の私のSharePoint」
仙台IT文化祭 学生&社会人におくる「僕の私のSharePoint」仙台IT文化祭 学生&社会人におくる「僕の私のSharePoint」
仙台IT文化祭 学生&社会人におくる 「僕の私のSharePoint」Atsuo Yamasaki
 
Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報Atsuo Yamasaki
 
20121006ヒーロー島
20121006ヒーロー島20121006ヒーロー島
20121006ヒーロー島Atsuo Yamasaki
 
SharePoint Business Connectivity Services を使用した外部アプリケーション連携
SharePoint Business Connectivity Services を使用した外部アプリケーション連携SharePoint Business Connectivity Services を使用した外部アプリケーション連携
SharePoint Business Connectivity Services を使用した外部アプリケーション連携Atsuo Yamasaki
 
過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策Atsuo Yamasaki
 
COD2012 大阪 グローバルコミュニケーション基盤としてのSharePoint
COD2012 大阪 グローバルコミュニケーション基盤としてのSharePointCOD2012 大阪 グローバルコミュニケーション基盤としてのSharePoint
COD2012 大阪 グローバルコミュニケーション基盤としてのSharePointAtsuo Yamasaki
 
VSハッカソンクラブ T3(2012/04/28)
VSハッカソンクラブ T3(2012/04/28)VSハッカソンクラブ T3(2012/04/28)
VSハッカソンクラブ T3(2012/04/28)Atsuo Yamasaki
 
わんくま同盟 大阪勉強会 #46
わんくま同盟 大阪勉強会 #46わんくま同盟 大阪勉強会 #46
わんくま同盟 大阪勉強会 #46Atsuo Yamasaki
 
Silverlightを囲む会in大阪#19
Silverlightを囲む会in大阪#19Silverlightを囲む会in大阪#19
Silverlightを囲む会in大阪#19Atsuo Yamasaki
 

Mais de Atsuo Yamasaki (14)

二求の塾 プログラミング講座(2019-08-10)
二求の塾 プログラミング講座(2019-08-10)二求の塾 プログラミング講座(2019-08-10)
二求の塾 プログラミング講座(2019-08-10)
 
二求の塾 プログラミング講座(2019-07-27)
二求の塾 プログラミング講座(2019-07-27)二求の塾 プログラミング講座(2019-07-27)
二求の塾 プログラミング講座(2019-07-27)
 
仙台IT文化祭 学生&社会人におくる 「僕の私のSharePoint」
仙台IT文化祭 学生&社会人におくる「僕の私のSharePoint」仙台IT文化祭 学生&社会人におくる「僕の私のSharePoint」
仙台IT文化祭 学生&社会人におくる 「僕の私のSharePoint」
 
20141213 jpsps
20141213 jpsps20141213 jpsps
20141213 jpsps
 
Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報Share pointを支えるsql server2014最新情報
Share pointを支えるsql server2014最新情報
 
20121006ヒーロー島
20121006ヒーロー島20121006ヒーロー島
20121006ヒーロー島
 
SharePoint Business Connectivity Services を使用した外部アプリケーション連携
SharePoint Business Connectivity Services を使用した外部アプリケーション連携SharePoint Business Connectivity Services を使用した外部アプリケーション連携
SharePoint Business Connectivity Services を使用した外部アプリケーション連携
 
過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策
 
COD2012 大阪 グローバルコミュニケーション基盤としてのSharePoint
COD2012 大阪 グローバルコミュニケーション基盤としてのSharePointCOD2012 大阪 グローバルコミュニケーション基盤としてのSharePoint
COD2012 大阪 グローバルコミュニケーション基盤としてのSharePoint
 
VSハッカソンクラブ T3(2012/04/28)
VSハッカソンクラブ T3(2012/04/28)VSハッカソンクラブ T3(2012/04/28)
VSハッカソンクラブ T3(2012/04/28)
 
SQLWorld★大阪#8
SQLWorld★大阪#8SQLWorld★大阪#8
SQLWorld★大阪#8
 
わんくま同盟 大阪勉強会 #46
わんくま同盟 大阪勉強会 #46わんくま同盟 大阪勉強会 #46
わんくま同盟 大阪勉強会 #46
 
SQLWorld★大阪#7
SQLWorld★大阪#7SQLWorld★大阪#7
SQLWorld★大阪#7
 
Silverlightを囲む会in大阪#19
Silverlightを囲む会in大阪#19Silverlightを囲む会in大阪#19
Silverlightを囲む会in大阪#19
 

[東京] JapanSharePointGroup 勉強会 #2

  • 1. PowerShellでSharePointを いじってみよう 2012.3.31 JPSPS#2 アンクの山本
  • 2. 自己紹介 • 山本太月 30代後半 • 株式会社 ANK : SharePoint開発チーム • 元自動車整備士、妻1人娘2人 • Twitter: @SharePoint_X • Facebook:https://www.facebook.com/sharepointx
  • 3. 今日の目標とお願い • まだ使ったことが無い方に 「何かPowerShellってよさそうだな」 と感じてもらう • 少し触ったことがある方に 「それ使えるかも」 という小ネタの提供 • タイトルと内容に違和感がある方に 細かいところは気にしないで頂きたい • リアクションがあるとやりやすい
  • 4. 目次 1. PowerShellの基本 1. ツール、環境 2. コマンド 3. 関数、コマンドレット 2. PowerShellでSharePointの操作、アクセス 1. SharePointのコマンド、オブジェクト 2. 構築編 for ITPro 3. 管理運用編 for Administrator 4. 開発編 for Developer 3. デモ 1. .Net資産活用 2. リストアイテムをExcelへ(Office365対応) 3. プッシュ配信型のお知らせ(未完)
  • 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. 基本② コマンド • まずは 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. 基本③ 関数・コマンドレット • 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. 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. 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. PS と SharePoint② 構築のお手伝い(2) • UIから操作できない設定変更が可能 – WebProperties に独自の設定値を保存 – 特定の列の非表示化 (ShowInDispForm) – SPDが勝手に書き換えるXSLを生で注入 – 任意のリストにイベントレシーバーを設定 – WebConfigの書き換え – コンテンツソースのクロールスケジュールをより詳 細に設定 • [TechNet] ファームの構成設定を文書化する http://technet.microsoft.com/ja-jp/library/ff645391.aspx
  • 11. PS と SharePoint③ 運用のお手伝い(1) • バックアップ&リストア – STSADMの代替 [TexhNet] Stsadm と Windows PowerShell 間のマッピング • サービスアプリケーションの管理 – 死活監視、再起動、トポロジーの変更 リモーティング: • ジョブ&バッチ処理 – タスクスケジューラー [CodePlex] SharePoint PowerShell Timer Jobs http://sppowershelltimerjob.codeplex.com/
  • 12. PS と SharePoint③ 運用のお手伝い(2) • ULS&イベント&IISのログ監視(収集) – Merge-SPLogFile ファームの全SharePointサーバーのULSログを収集してマージ • 利用状況の監視 • リストアイテムの操作、ドキュメントの管理、 権限管理 • メール送信 – 例)昨日投稿されたアイテム一覧を毎朝配信
  • 13. PSとSharePoint④ 開発のお手伝い • 開発・検証環境の構築 • ブラウザUIでは見られない情報の確認、変更 – 非表示列、非表示リストを一時的に表示 – 隠しフィーチャーの状態管理 – ファームソリューションの取得 • テスト&デバッグ – 大量データやイレギュラーデータの作成 • コンソールアプリの代わりに – Add-Type コマンド最強
  • 15. #Setting $targetSiteUrl = "http://spx01/" $targetListName = "TestBigList" # Add SharePoint snapin Add-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 class Add-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. Demo② リストの内容を クライアントから取得 そしてExcel出力! (CSVじゃないよ)
  • 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. # 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()
  • 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. 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. 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/