COLUMN コラム

運用

佐々木悠

佐々木悠

PowerShellを利用してアイテムごとのフィールド値の一覧を取得する方法

慣れれば数ステップでデータ取得ができる、PowerShellを用いた一覧取得方法をご紹介します。

Webサイトの更新や仕様書などの資料作りなどの際に、ある親アイテム配下に格納されている子アイテムの特定フィールドの値を一覧で取得したいときがあります。

いくつかある取得方法のうち今回は、手軽かつ応用が効くPowerShellを用いた一覧取得方法を紹介します。

TL;DR

忙しい方のために、すぐ使えるテンプレートを用意しました。丸数字の箇所を編集してお使いください。


# ①親アイテムのアイテムパスを記述します
$itemPath = '親アイテムのアイテムパス'

# (親アイテム配下の子アイテムが取得される)
$items = Get-ChildItem -Path master:$itemPath -Language 'ja-JP'

# (子アイテムごとに繰り返し処理される)
foreach($item in $items) {
  # ②子アイテムの取得したいフィールドの名前を記述します
  $item.Fields['子アイテムの取得したいフィールドの名前'].Value
}

ここからは、より具体的な手順を、初学者でも理解しやすい内容にまとめたものを紹介します。

PowerShellを利用することのメリットと注意点

PowerShellを活用することにはいくつかのメリットがありますが、同時に注意すべきポイントも存在します。確認しておきましょう。

  • 簡単な記述でできる:たった数行のコマンドだけで、いろいろな情報が取得できます。C#やSQL、ASP.NETといったプログラミングの専門知識は必要としません。
  • 技術者に頼らなくてよい:簡単な記述でできるため、基本をおさえればディレクターや営業でも扱えます。エンジニアの工数をおさえたり、指示書を書く必要もありません。
  • ミスや誤操作には慎重に:誤ったコマンド入力による誤操作が発生する可能性がありため、慎重な操作とテストを心がけましょう。

今回紹介する方法は、取得系のコマンドのみを用いるため基本的には安全ですが、絶対ではありません。実行前にかならずチェックしましょう。

ちょっとだけ覚えておきたいプログラミングの知識

プログラミングでよく使われる知識をおさらいしておきましょう。

  • 変数:取得したデータなどを入れるための箱です。箱に入れることを代入と言います。
  • 繰り返し:forやeachなどと呼ばれ、同じ処理を繰り返すときに使います。
  • 条件分岐:ifなどと呼ばれ、ある条件に一致するか否かで処理を分岐します。

取得フロー

今回の例では、子アイテムのページタイトルの一覧を作るという設定で手順を説明します。


[図1]今回は子アイテムあるページタイトルの一覧を作る

取得に必要な情報をコンテンツエディターから取得する

フィールド値の一覧取得には、「親アイテムのアイテムパス」「取得するフィールドの名前」の2つが必要です。

親アイテムのアイテムパス

親アイテムを開き、クイック情報セクションの「アイテム Path」値を取得します[図2]。


[図2]親アイテムのアイテムパスを取得する

取得するフィールドの名前

まず、子アイテムを開き、クイック情報セクションの「テンプレート」値をクリックします[図3]。


[図3]子アイテムのテンプレートを開く

テンプレートマネージャーが開きますので、該当するフィールドの名前を取得します。 今回はページがイトルを取得したいので、「Page Title」が取得対象です[図4]。


[図4]取得したいフィールドの名前を特定する

対象のフィールドが見つけられませんか?

  1. 継承タブをクリックして、表示された画面の中から対象のフィールドを確認してください。
  2. 対象のフィールドを内包しているテンプレートをクリックすると、再び[図4]の画面が開き、フィールドの名前を特定できます。


[図5]継承タブから使われているフィールドの特定ができる

ここまでの手順で、以下の情報が取得できました。

  1. 親アイテムのアイテムパス:/sitecore/content/Home/parentItem
  2. 子アイテムの取得したいフィールドの名前:Page Title

コマンドを作成する

情報は取得できたら、コマンドを実行していきましょう。 なお、メモ帳やテキストエディターであらかじめプログラムを書いておくことで、PowerShell側の操作はコピー・アンド・ペーストして実行するだけになるので、誤操作を減らすことができます。


# 親アイテムのアイテムパスを記述します
$itemPath = '/sitecore/content/Home/parentItem'

# (親アイテム配下の子アイテムが取得される)
$items = Get-ChildItem -Path master:$itemPath -Language 'ja-JP'

# (子アイテムごとに繰り返し処理される)
foreach($item in $items) {
  # 子アイテムの取得したいフィールドの名前を記述します
  $item.Fields['Page Title'].Value
}

PowerShellを実行する

ツリービューの任意のアイテムを右クリックして、「コンソール」をクリックします。


[図6]ツリーの任意のアイテムを右クリックしてコンソールを開く

PowerShellコンソールが表示されますので、作成したコマンドをペースト(Ctrl + V)して、実行(Enter)します。


[図7]作成したコマンドを貼り付けして実行する

すると、次のように対象のフィールドの値が行ごとに出力されます。


[図8]ページタイトルの一覧が実行結果として出力された

おわりに

PowerShellを利用すると、フィールドの値を簡単に出力できることができました。

こういったことができるのも、Sitecoreに統合されたPowerShellの機能を標準で備えているからであり、これによってSitecoreのデータベースやアイテムのフィールドに対して直接PowerShellスクリプトを実行できるようになっています。

ここで紹介した方法はごく初歩的な内容ですが、コマンドをより細かく設定していけばより多くの情報収集が可能です。データをCSV形式でダウンロードしたり、条件分岐を使って複数の情報を組み合わせたデータの取得ができたりします。今後もPowerShellを活用したデータ取得方法を紹介できればと思います。



※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。

この記事を読んだ人はこちらの記事も読んでます

LYZONとのパートナーシップ

Sitecore導入に関するご相談・資料ダウンロード

導入をご検討・ご依頼の方や、サービスについてご不明点がございましたらお気軽にお問い合わせください。

Sitecoreの運用問題を解決する

既にSitecoreを導入しているお客様向けサービス