2013年1月31日木曜日

◆SharePoint サイトにライブラリを追加する

PowerShell: ◆SharePoint サイトコレクションにサイトを追加する

上記でサイトの追加まで出来たので、今度はそのサイトにライブラリを追加する。
ここでは、「データ接続ライブラリ」を追加してみた。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016

#ライブラリ追加
$DLIB = "D接続LIB"
$web = Get-SPWeb "http://server/sites/web1"
if($web.Lists.title -notcontains $DLIB
){
 
$listid =
 
  
$web.Lists.Add($DLIB,"汎用データ接続ライブラリ","DataConnectionLibrary"
)
 
$url =
 
  
$web.Lists | ? id -eq $listid | % defaultviewurl
 $pubWeb =
 
  
[Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web
)
 
$nvnode =
 
  
New-Object Microsoft.SharePoint.Navigation.SPNavigationNode($DLIB,$url
)
 
$prvnode =
 
  
$pubweb.Navigation.CurrentNavigationNodes | ? title -eq "ドキュメント"
 $pubweb.Navigation.CurrentNavigationNodes.Add($nvnode,$prvnode)
}

基本的には、3行目でWebサイトを取得して、その「Lists」コレクションに「Add」してあげれば良い。

Add(ライブラリ名称,説明,ライブラリの種類)
としてあげれば良いのだが、このライブラリの種類(テンプレート)をどう指定すればよいのかちょっと考えてしまう。

きっと英語ならそのままなのだろうが・・・。

サイトテンプレートは「Get-SPWebTemplate」が用意されていたが、ライブラリの場合はWebサイトのインスタンスから直接取得できるようだ。

ただし、「Add」メソッドに指定するのは日本語ではないので、果たしてどのプロパティか?となるのだが、眺めてみても今一つしっくりこない。

とりあえず「Type」が使えた(どのライブラリでも使えるのかは?)。

image

ライブラリの追加自体はこれでOKとなったのだが、通常ライブラリはサイドリンクバーに表示する。

これをGUIでやるには「サイトの設定」メニューで「ナビゲーション」を選び、
image

「構造ナビゲーション」で「現在のナビゲーション」に追加してあげれば良い。
image

これを「PowerShell」でやるために、9,10行目で現在のWebサイトの「PublishengWeb」を取得。(それって何?って話もあるが、とりあえずGUIメニューで選んだ「ナビゲーション」そのものと思っておく)

あとは15行目で、「PublishengWeb」の「Navigation」ノードに追加してあげれば良い。

追加するにはライブラリを「SPNavigationNode」オブジェクトにしないといけないのだが、これは「名前」と「url」から直接コンストラクトできる。

15行目の「CurrentNavigationNodes」が返してくる「SPNavigationNodeCollection」には「Add」メソッド以外にも「AddAsFirst」と「AddAsLast」メソッドがあり、後ろに追加していくだけなら「AddAsLast」を使った方が簡単だが、2013ではトップサイトのナビゲーションに自動で「最近使った項目」なるものが表示される。(非表示にもできるが)
image

できればそいつの前に追加したかったので、「ドキュメント」ライブラリを見つけて、その後ろに追加する事とした。

また、7,8行目では追加したライブラリのURLを取得している。
通常であれば第1引数で指定したタイトルがそのまま使われるのだが、タイトルに日本語を含む場合はその部分が削除されるようだ。
例えば、「D接続LIB」であればURLには「DLIB」が使われる。
これで決め打ちしても良いのだが、一応追加されたIDで取得しなおしてURLを拾っている。
ADDメソッドにはURLを指定するオーバーロードもあるのだがSharePoint的に今一つ使い方が判っていないので・・・。

◆リモートマシンに共有フォルダを作る

リモートのマシンに共有フォルダを作るサンプルがあったのでメモしておく。

001
002
003
004
005
006
007
008
009
010

$Path = 'C:\tools'
$Name = 'tools'
$Type = 0
$Maximumallowed = 5
$Description = 'PowerShell Share test'
$ComputerName = 'mtg8'
$rv = Invoke-WmiMethod -Path 'Win32_Share'
 `
 
-ComputerName $ComputerName -Name Create
 `
 
-ArgumentList $null,$Description,$MaximumAllowed,$Name,$null,$Path,
$Type
$rv
.ReturnValue

これを実行すると以下のような共有が作られる。

image

ただしこの「Create」メソッドが何者なのか今一つ良く判らない。
以下のメソッドだとは思うのだが、パラメータの順番が一致していないように見える。

image

調べてみたところ以下のようにすると順番が表示できるようだ。(CreateはStaticのようです)

001
002

([wmiclass]"win32_share").PSBase.
GetMethodParameters("Create").Properties | ft name,type -auto

image

2013年1月28日月曜日

◆ログオンできる端末を制限する

ユーザーID自体にログオン可能な端末を制限することができる。

対象者を「Active Directory管理センター」で開き「ログオン先」に指定するだけ。
image
image

これをPowerShellからやるとこんな感じ

>set-ADUser User1 -add @{userworkstations='PC1'}

しかし、以下のように複数のPCを指定すると

>set-ADUser User1 -add @{userworkstations='PC1','PC2'}

image

といったエラーになる。

ヘルプを見ても
image

となっているので指定の仕方に間違いは無いようなのだが・・・。

実は、調べていると「ログオン先」のプロパティについては予めパラメータが用意されていた(><)

>Set-ADUser User1 -LogonWorkstations "PC1","PC2"

しかし、これがまたエラー。
このパラメータは「string」を要求する・・・。

でも、「LogonWorkstations」って書いてあるじゃん。と思いながらよくよくヘルプを見ると、配列ではなくカンマ区切りの文字列を指定するのだそうな・・・。

こうですね。

>Set-ADUser User1 -LogonWorkstations "PC1,PC2"

もしやと思い最初の「Add」パラメータもハッシュテーブル値に同じ形式で指定したらうまくいった。(ヘルプ君間違っているのね・・・)

>set-ADUser User1 -add @{userworkstations='PC1,PC2'}

ふぅ~。

2013年1月25日金曜日

◆SharePoint サイトコレクションにサイトを追加する

「New-SPWeb」コマンドレットで簡単に追加できる。

パラメータは

  • URL:親のURLに続けて適当なIDを付ける。http://親/子
  • Template:「Get-SPWebTemplate」で一覧が表示されるので適切なものを選んで「Name」を指定する。(チームサイトあたりが無難か)
    image
  • Name:サイト名を指定
  • UseParentTopNav:親のトップリンクバーと同じトップリンクバーを表示するかを指定するスイッチ。一般的にはトップリンクバーは固定の方が判りやすいので指定したほうが良いような。
  • AddToTopNav:トップリンクバーに表示するかを指定するスイッチ。子ども側で指定するよりも親側で「サブサイトの表示」PowerShell: ◆SharePoint トップリンクバーへのオンマウスでサブサイトを表示するを指定したほうが良い気がする。(両方で指定するとリンクが重複表示されるのでどちらかに決める)
001
002
003
004
005

#サイトを作成する
$site = "http://server/sites/hoge"
if(!(Get-SPWeb $site -ea 0
)){
   
New-SPWeb $site -Template "STS#0" -name "Myサイト" -UseParentTopNav 
}
<!--EndFragment--

サイトの存在確認は、サイトコレクションからサブサイトの一覧を取ってきて確認することもできる。

◆SharePoint トップリンクバーへのオンマウスでサブサイトを表示する

トップリンクバーにサイトを並べて、オンマウスでそのサブサイトを展開するというのは良くあるパターン。

これには以下の設定をしておけばよい。

  • ルートサイトで、「サイト設定」「外観」「ナビゲーション」を選ぶ
    image
  • 「グローバルナビゲーション」で「構造ナビゲーション:現在のサイトのナビゲーションアイテムを表示する」を選び、「サブサイトを表示する」をチェックする
    image

これをPowreShellからやるとこんな感じになりそう。<!

001
002
003
004
005
006
007

#サブサイトをメニューに表示する
$web = Get-SPWeb $site.Url
$pubWeb =
 
 
[Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$pubWeb.Navigation.GlobalIncludeSubSites = 
$true
$pubWeb
.Update()
$web.Dispose()
<!--EndFr--EndFr

コマンドレットだけで完結していないあたりが今一つだが、今のところ他の方法は見つからなかった。

◆SharePoint サイトコレクションの機能が有効か確認する

PowerShell: ◆SharePoint 発行インフラストラクチャ機能をアクティブ化するでアクティブ化する方法は判ったのだが、このコマンドは既にアクティブ化されている機能に実施すると例外が発生する。

サイトを構成する時に、全スクリプトが一発でうまくいくような気もしないので、ある程度リランも出来るようにしたい。

なので、非アクティブの時だけアクティブにするという条件を付ける。

単純に「Test-SPFeature」みたいなコマンドは用意されていないので、当該サイトのアクティブ機能をリストアップして確認することにした。

001
002
003
004
005

#発行インフラストラクチャ機能をアクティブ化する
$site = "http://server/sites/hoge"
if((Get-SPFeature -Site $site).displayname -notcontains "publishingsite"
){
   
Enable-SPFeature -Identity publishingsite -Url $site
}
</

2013年1月24日木曜日

◆SharePoint 発行インフラストラクチャ機能をアクティブ化する

また、大嫌いなSharePointをやっている。(笑)

使う側からするとSharePointは悪くないと思うのだが、提供する側からすると悪夢である。

なにせ設定の仕方が良く判らない。

そもそもメニューが見つけられない。

ただでさえ見つけられないのに、時と場合によっては消えたりする。
GUIで一旦設定するとコマンドからじゃないと戻せなくなるカオスなやつまで存在する。

今回は消えるパターンの1つである「発行インフラストラクチャ機能」をアクティブ化する。
これ自体はサイトに機能を追加してくれるものなのだが、それによってメニューまで変更してしまう。

追加ではなく置き換えをしてくれるので、「あのメニューはどこへ?」と探し回っても一生見つからない憂き目にあう。

SharePointもバージョンを重ねて今回2013になった。

これまでの反省を踏まえて、基本的な初期設定はコマンドで用意しておこうと思う。

そうすれば、今後メニューを探し回る必要が無くなる。(かもしれない)

 

GUIでは「サイト設定」「サイトコレクションの管理」「サイトコレクションの機能」を開いて以下を「アクティブ化」する。
image

これをPowerShellから行う。

ちなみに、SharePoint2013をインストールすると、PowerShellも3.0を入れてくれるようだ。
嬉しいことに、SharePoint用のコマンドレットヘルプは日本語化済みである。

サイトコレクションの機能をアクティブ化という事なので、「機能」すなわち「feature」であたりを付けるとコマンドレットはすぐに見つかった。

>Get-SPfeature –site http://SVname/sites/XX

で機能の一覧が表示される。
image

あとはこの名前で

>Enable-SPfeature –id DisplayName –site http://SVname/sites/XX

としてあげれば良いだけ。

なのだが、この「DisplayName」が判らない・・・。

はたして、「SharePoint Server 発行インフラストラクチャ」という機能はなんという「DisplayName」なのか。

英語のサイトを探すと機能名はすぐに判った(そのままなので)
image

で、こいつの「DisplayName」はちょっと苦労したが、以下で見つかった。
TechNet Wiki

image

2013年1月23日水曜日

◆IISのログ記録フィールドを取得する

IISではログに出力する項目をカスタマイズすることができる。

IISマネージャから「ログ記録」を開いて、
image

「フィールドの選択」ボタンを押すと確認できる。
image

image

これをPowerShellで確認するには以下のようにすると良い。

001
002
003
004

Import-Module WebAdministration
$filter = "system.applicationhost/sites/sitedefaults/logfile"
Get-WebConfiguration -filter $filter  |
 
 
select -expandp logextfileflags

image

2013年1月22日火曜日

◆メモリーサイズを調べる

最近見た情報によると、Ver3のヘルプ日本語化はあと3か月から半年以内に完了するらしいとのこと。

日本語化されないならされないで英語を読もうかと思っていたが、日本語化されるのならばそれほど急ぐ理由もないので待っていようかと思う。

surfaceが未だに日本で発売されなかったり、WindowsPhoneも発売されなかったりと、日本のプライオリティが下がってしまったのですかね・・・。

当面は、これまでメモしてあったブログに載せるまでではないかなっと思っていた情報をちょこちょこUPしていこうかと思っています。

単にどこかで見かけてメモしてあるだけなので自分自身消化できていないものもあります。

 

という訳でまずは、「メモリーの情報を表示する」。
WMIから引っ張ってくるだけ。
コード情報をMSのサイトから見つけるのがちょっと面倒って所だろうか。

フリーソフトとかを使えばメモリーのみならず各種詳細情報を取得できるので普通はそちらを使うが、複数のPCの情報を纏めてとなるとここら辺が有効になるかも。

001
002
003
004
005
006
007
008
009
010
011
012

$memorytype = "Unknown", "Other", "DRAM", "Synchronous DRAM", "Cache DRAM",
"EDO", "EDRAM", "VRAM", "SRAM", "RAM", "ROM", "Flash", "EEPROM", "FEPROM",
"EPROM", "CDRAM", "3DRAM", "SDRAM", "SGRAM", "RDRAM", "DDR", "DDR-2","DDR-3"
$formfactor = "Unknown", "Other", "SIP", "DIP", "ZIP", "SOJ", "Proprietary",
"SIMM", "DIMM", "TSOP", "PGA", "RIMM", "SODIMM", "SRIMM", "SMD", "SSMP",
"QFP", "TQFP", "SOIC", "LCC", "PLCC", "BGA", "FPBGA", "LGA"
$col1 = @{Name='Size (GB)'; Expression={ $_.Capacity/1GB } }
$col2 = @{Name='Form Factor'; Expression={$formfactor[$_.FormFactor]} }
$col3 = @{Name='Memory Type'; Expression={ $memorytype[$_.MemoryType] } }

Get-WmiObject Win32_PhysicalMemory |
 
 
ft BankLabel, $col1, $col2, $col3,Speed -auto

image

積んであるのはDDR2の400MHzという化石のようなスペック(TT)

Speedが800で表示されるのはデュアル動作だからって事だろうか。

2013年1月15日火曜日

◆Version3で.NETのバージョンを確認する

PS3は.NET4.0と.NET4.5の両方で動作するとのこと。

バージョンを確認するにはリビジョンが17000より大きければ4.5と判断できるそうな。(バジョン表示はどちらも4.0)

PS>$PSVersionTable

Name                           Value
----                           -----
PSVersion                      3.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18010
BuildVersion                   6.2.9200.16434
PSCompatibleVersions           {1.0, 2.0, 3.0}
PSRemotingProtocolVersion      2.2

2013年1月5日土曜日

◆テスト投稿

テスト

ああああああああ

ああああああ