2013年2月6日水曜日

◆CABファイルを展開する

InfoPathのテンプレート(XSNファイル)をSharePoint2010からSharePoint2013に移行しようとしている。

残念なことにXSNファイル内にサーバーURLがハードコードされているので、そのままでは持って行けない。

テキストに変換して一括で修正できないか?

最近のパターンからするとZIP展開するとテキスト(xml)ファイルが出てくるパターンかと思ったのだがそうでもなさそう。

調べてみるとどうやらZIP形式ではなく、CABなんだそうな・・・。

PowerShellでのCABファイル操作を調べてみると以下にサンプルがあったので使わせてもらう。
Windows PowerShell で .CAB ファイルを作成する

展開処理を最小限に抜き出すとこんな感じ。

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

Function ConvertFrom-Cab()
{

Param
(
 
$cab ,
  $destination
)
 
$comObject = "Shell.Application"
  $shell = New-Object -Comobject $comObject
  if(!$?) { $(Throw "unable to create $comObject object"
)}
 
$sourceCab = $shell.Namespace($cab).
items()
 
$DestinationFolder = $shell.Namespace($destination
)
 
$DestinationFolder.CopyHere($sourceCab
)
}


ConvertFrom-Cab -cab "F:\Test.cab" -destination "F:\Desktop\wk"

ファイルの拡張子はXSNのままではうまくいかなかったのでCABにリネームした。

最初は気づかなかったが、ミニマムにしたソースを見てみるとZIPの解凍に似ている。

っていうか、もしかして同じ?

以前作ったZIP解凍のソースを見てみたら、同じですねぇ。

だから拡張子をCABにしないとダメなのね・・・。

◆コンストラクタを表示する

TypeのGetConstructorsメソッドで確認できる。

image

2013年2月5日火曜日

◆ネットワークカードの速度を表示

001
002
003

[System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() | 
 
ft Description,OperationalStatus,
    @{n="Speed(M)";e={($_.speed/1000000).tostring("0.0").padleft(8)}} -auto

image

2013年2月4日月曜日

◆SharePoint InfoPathフォーム テンプレートをアクティブ化する

PowerShell: ◆SharePoint InfoPathフォーム(xsn)をアップロードするでアップロードしたテンプレートは、そのままではまだ使えない。

テンプレートを使いたいサイトコレクションごとに「アクティブ化」という作業が必要になる。

GUIでの作業は、サーバー側の管理サイト「サーバー全体の管理」から行う方法と、サイトコレクションの「サイトの設定」から行う方法の2通りがある。

<サーバー全体の管理>

  • 「サーバー全体の管理」「アプリケーション全般設定」「フォームテンプレートの管理」をクリック
  • 「フォームテンプレートの管理」画面でテンプレートが一覧表示されるので対象のテンプレートのドロップダウンを表示させて「サイトコレクションへのアクティブ化」をクリック
    image
  • 「フォームテンプレートのアクティブ化」画面が表示されるので、アクティブ化したいサイトコレクションを選択し「OK」をクリック
    image

<サイトコレクション・サイト設定>

  • サイトコレクションのトップサイトを開く
  • 設定ボタンをクリックし、表示されたメニューから「サイトの設定」をクリック
    image
  • 表示された「サイトの設定」画面から「サイトコレクションの管理」「サイトコレクションの機能」をクリック
    image
  • 表示された「サイトコレクションの機能」画面でアップロードしたテンプレートを探し「アクティブ化」ボタンをクリックする
    image

<PowerShellでの設定>

PowerShellからは「Enable-SPInfoPathFormTemplate」コマンドレットを使えば一発で設定が可能だ。

>Enable-SPInfoPathFormTemplate -Identity xsnファイル名 -Site サイト

前回のテンプレートアップロード時に一緒にやってしまえば良いだろう。

このコマンドは既に「アクティブ」な機能に対して行うとエラーが返ってくるので(無視しても良いが)一応確認してから登録することにした。

アクティブな機能を取ってくるのはとりあえず以下のような感じ。(ベストかとどうかは判らない)

>(Get-SPSite "http://sv/sites/hoge").Features | % properties | ? name -eq "OriginalFileName" | % value

登録するInfoPathファイルがここで返ってくるコレクションに含まれるかチェックすればよい。

前回のアップロードに今回の「アクティブ化」を追加したのが以下のソース。

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

#サイトコレクション取得
$Root = "http://sv01/sites/hoge"
$siteCol = Get-SPSite $Root
#InfoPathフォームアップロード&アクティブ化
$xsnDocs = $siteCol.Features |
 
 
% properties | ? name -eq "OriginalFileName" | % value
$oldSitePath =
 
 
"\\spsv2010\DavWWWRoot\sites\site1\FormServerTemplates"  #旧サイト
dir $oldSitePath | %
{
   
Install-SPInfoPathFormTemplate -Path $_.
FullName
   
if($xsnDocs -notcontains $_.
Name){
       
Enable-SPInfoPathFormTemplate -Identity $_.Name -Site $Root
    }
}

◆リモートマシンのドライブにデフラグが必要か調べる

PowerShell: ◆各ドライブにデフラグが必要か調べるのリモート版。

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

function DefragAnalysis($computer)
{
 
gwmi win32_logicaldisk -Filter DriveType=3 | %
{
   
$drive = $_.
DeviceID
   
$disk =
 
     
gwmi win32_volume -Filter "DriveLetter='$drive'" -Comp $computer
    $def = 1 | select ComputerName,Drive,DefragRecommended
    $def.ComputerName = $computer
    $def.Drive = $drive
    $def.DefragRecommended =
 
      (
Invoke-WmiMethod -Path $($disk.
__PATH)  `
          
-Name DefragAnalysis).
DefragRecommended
   
$def
  } 
}


$computers = "sv01","sv02","sv03"
$computers | %{DefragAnalysis $_} | ft -AutoSize

「Win32_volume」オブジェクトの「DefragAnalysis」メソッドを「Invoke-WmiMethod」で呼ぶ。

ただし、リモートに対してオブジェクトを渡せないので「__PATH」プロパティに持っているシリアライズされた情報を渡すって感じでしょうか。

image

2013年2月1日金曜日

◆SharePoint InfoPathフォーム(xsn)をアップロードする

2010のSharePointでInfoPathを使ったライブラリがいくつかあるので2013に持ってきて使えるようにしたい。

まずはTemplateを登録する。

GUIでやるには、

  • 「サーバー全体の管理」「アプリケーションの全般設定」「フォームテンプレートの管理」をクリック
    image
  • 表示された「フォームテンプレートの管理」画面で「フォームテンプレートのアップロード」をクリック
    image
  • 「フォームテンプレートのアップロード」画面が表示されるので「参照」ボタンをクリックして該当の「xsn」ファイルを指定してアップロードする

これをPowerShellでやるには「Install-SPInfoPathFormTemplate」コマンドレットを使えば良い。
アップロードしたい「xsn」ファイルを引数に指定するだけで簡単にアップロードできる。

旧2010SharePointシステムからWebDav経由でテンプレートを取ってきてインストールするにはこんな感じになる。

001
002
003
004

$oldSitePath = 
 
"\\spsv2010\DavWWWRoot\sites\site1\FormServerTemplates"  #旧サイト
dir $oldSitePath |
 
 
%{Install-SPInfoPathFormTemplate -Path $_.FullName}

◆各ドライブにデフラグが必要か調べる

Win32_VolumeのDefragAnalysisメソッドが使える。

001
002
003
004
005
006
007
008

gwmi win32_logicaldisk -Filter DriveType=3 | %{
 
$drive = $_.
DeviceID
 
$disk = gwmi win32_volume -Filter "DriveLetter='$drive'"
  $def = 1 | select Drive,DefragRecommended
  $def.Drive = $drive
  $def.DefragRecommended = ($disk.DefragAnalysis()).
DefragRecommended
 
$def
} | ft -auto

image