5月 062017
 

先日、SharePoint のビューにかけるフィルターで動的値を使えることを知りました。

[Me] と [Today] を使うことで、アクセスしたユーザーとアクセスした日をフィルターとして使えます。

こちらを使って、ノンプラミングで簡単な掲示板を作ってみようと思いました
※ノンプラミングは無理でした _(:3」∠)_

やりたい事(仕様)

  • タイトル、本文、添付ファイルに加えて、掲載期間を指定できる
  • 他人の作ったデーターは掲載期間外の時に閲覧不可
  • 自分の作ったデーターは掲載期間外でも閲覧可能

環境

  • サーバー環境
    • SharePoint Online
  • クライアント環境
    • Windows 10 Pro
    • PowerShell 5.1

用意したリスト

リスト名は 掲示板 にしました。

リストの作成方法は詳しく書きませんが、列の内部名を半角英数字で付けるために、下記表の「列の内部名」で一旦登録して、その後に「列名」に変更しています。

列の内部名 列名 種類 必須
body 本文 複数行テキスト
publish_date 公開日時 日付と時刻
limit_date 掲載期限 日付と時刻
  • 公開日時(publish_date)

  • 掲載期限(limit_date)

フィルターを作成する

フィルターは既存である「すべてのアイテム」を修正しました。

  • 表示
    1. タイトル
    2. 登録者
    3. 公開日時
    4. 掲載期限
  • 並び替え
    1. 公開日時、降順
    2. 掲載期限、昇順
  • フィルター

このフィルターで次を実現している(つもり)です。

(掲載期限 is null and 公開日時 <= 今日) or (掲載日時 >= 今日) or (登録者 = カレントユーザー)

[Today] の落とし穴

SharePoint をやっている人だと常識なのでしょうが、[Today] は日付しか比較してくれません。[Now] とかは用意されていないようです。なんてイケてないんですか… しぇあぽいんとさんツンツンしすぎですね。

このままだと、公開日時 2017/05/06 12:00 とした記事が 2017/05/06 になったら見れてしまいます! いや、いいんですが折角作ったのに悲しい。

そこでぐぐってみると、SharePoint Designer で CAML Query を変更している記事が多いので、そちらを倣って… SharePoint Designer は嫌いなので PowerShell でやることにしました。

[Today] を時間を見るように設定する

PowerShell を起動して下記を実行します

18 行目まではほぼおまじないです。

21 行目で既存のビュー「すべてのアイテム」を取ってきて、26 行目で IncludeTimeValue="True" を付け加えて時間も加える設定をしています。

結果

  • 登録者 2017/05/06 12:01 過ぎ

    登録者は全部データが見えている

  • 別ユーザー 2017/05/06 11:55

    別ユーザーからは 公開日時 ≦ 現在 ≦ 掲載期限 のデーターが見えてる
    #公開期限 12:00 のデーター(パターン2 とパターン6)が見える

  • 別ユーザー 2017/05/06 12:01 過ぎ

    別ユーザーからは 公開日時 ≦ 現在 ≦ 掲載期限 のデーターが見えてる
    #パターン2 とパターン6 のデーターが見えない

参考

4月 162017
 

しぇあぽいんとさんと仲良くなるために、まずは Windows では一番慣れている PowerShell を使って SharePoint Online へアクセスしてみたメモ。

CSOM (クライアント側オブジェクト モデル) を使って、リスト一覧を取得してみます。

環境

  • Windows 10 Pro
  • PowerShell 5.1

事前準備

SharePoint Online 用の SDK がインストールされていない時はインストールします。

サンプルコード

ユーザーが miyamiya@example.com、SharePoint Online の URL が https://<tenant>.sharepoint.com/sites/example と仮定してサンプルコード書く。

考察

一旦 Load で予約して、ExecuteQuery で実際に取得するのが慣れるのに時間がかかりそう。

参考

4月 162017
 

しぇあぽいんとさんと仲良くなるために、まずは Windows では一番慣れている PowerShell を使って SharePoint Online へアクセスしてみたメモ。

環境

  • Windows 10 Pro
  • PowerShell 5.1

事前準備

SharePoint Online 用の SDK をインストールします。

サンプルコード

ユーザーが miyamiya@example.com、SharePoint Online の URL が https://<tenant>.sharepoint.com/sites/example/SitePages/Home.aspx と仮定してサンプルコード書く。

考察

REST API を叩いて JSON を返すサンプルを参考にしましたが、別に REST API を叩きたいわけではなかったので、とりあえずアクセスした画面を HTML で保存するだけを行ってみました。

恐らくユーザー名とパスワードを使うのはあまり良くないのだろうけど、一般ユーザーではこの方法しかないんじゃないかな?と思っています。

参考

4月 152017
 

以前 Ruby を使って Gmail 経由でメール送信 というブログを書きましたが、今度は Windows で定期実行される処理(PowerShell)からレポートメールを送る必要があったのでメモ。

環境

  • Windows 10 Pro
  • PowerShell 5.1

サンプルコード

自分のメールアドレス(差出人)が miyamiya@example.com 、宛先のメールアドレスが misono@example.jp としてサンプルコードを書いてみる。ここでは miyamiya@example.com が Office 365 のアカウントとする。

参考

11月 262016
 

先日 GitHub で他の方のソースコードをみている時にこの機能を知りましたので、同じように知らない人が居ればと思い紹介。

Splatting とは

公式にはこのように書いてありました。

スプラッティングは、パラメーター値のコレクションをまとめてコマンドに渡す手法です。Windows PowerShell はコレクションのそれぞれの値をコマンドのパラメーターに関連付けます。スプラットされたパラメーター値は、名前付きスプラッティング変数に格納されます。名前つきスプラッティング変数は普通の変数のように見えますが、ドル記号 ($) の代わりにアットマーク (@) で始まります。アットマークは Windows PowerShell に対して、引数が単一の値ではなくコレクションとして渡されることを伝えます。

スプラッティングはコマンドを短くし、読みやすくします。スプラッティング値は別のコマンドの呼び出しで再利用できます。また、スプラッティングを利用して、パラメーター値を $PSBoundParameters 自動変数から他のスクリプトや関数に渡すことができます。

記法

Windows PowerShell 3.0 以降では、コマンドの全パラメーターを次のように表せるそうです。

よく使いそうな例

可読性が良くなるので使っているという事もありますが、例えば自作の関数で引数が多いときや、条件によって動作を変える時に使い始めています。

次の関数は、引数で Param1, Param2, Param3 に数値を渡すと足し算の練習?をして、-Exec スイッチを入れると実際に足し算を行う関数です。

例えば、時分秒を合計して、日付が奇数なら -Exec スイッチを付けるとする

ダラダラ書いてみた例

Splatting を使って書いてみた例

11月 202016
 

Microsoft Cognitive Services を使って何かやってみようと思い、散歩しながら考えた結果、Google Custom API を使って画像を検索して、その画像の表情を Microsoft Cognitive Services で取得して割合を確認した時の備忘録です。

画像を集める

まずは Google Custom Search API の準備を行います。 私は以前 Hubot で遊んでいる時に設定したことがあるのですが、全然覚えていなかったので、備忘録として詳しめに書きます。

1. プロジェクトを作ります(Google Custom Search API の準備)

  • 1-1. 「IAM と管理」の「全てのプロジェクト」 から、[プロジェクトの作成] をクリックします。

  • 1-2. 新しいプロジェクト名を入力します(少し時間がかかります)

  • 1-3. 画面が切り替わった後、[Custom Search API] をクリックします

  • 1-4. [有効にする] をクリックします

  • 1-5. [認証情報に進む] をクリックします

  • 1-6. 必要な認証情報の種類を「Custom Search API」に選択して、[必要な認証情報] をクリックします

  • 1-7. API キーをコピーしてメモ帳とかに貼り付けておいて、[完了] をクリックします

2. Custom Search Engine を作成します(Google Custom Search API の準備)

  • 2-1. CSE(Custom Search Engine)https://cse.google.com/cse/all の画面から [Add] をクリックする

  • 2-2. 検索するサイトに「www.google.co.jp/*」、言語を「日本語」と選択して [作成] をクリックします

  • 2-3. [コントロールパネル] をクリックします

  • 2-4. [検索エンジンID] をクリックして、表示された検索エンジン ID をメモ帳とかに貼り付けておきます

  • 2-5. 「画像検索」をオンに、検索するサイトを「追加したサイトを重視して、ウェブ全体を検索する」に選択します

3. Google Custom API を PowerShell で叩いてみる

早速 API を叩いて画像の URL を取得します。

一度に 10 件の URL を取得できます。

つまり上記の例では、恐らく $links 内に misono の写真の URL が 10 個ゲットできているはず… (ゴクリ

画像から表情データを収集する

Microsoft Cognitive Services の Emotion API を使って表情データを取得していきます。

4. Microsoft Cognitive Services を使う準備

下記記事が判りやすいです。ありがとうございます!

5. Microsoft Cognitive Services の Emotion API で情報を取得

実行した結果はこのようになりました

Excel でグラフ化する

数値だけみても、自然な表情か喜んでいる写真が多いのが判りますが、折角ですので手元の Excel でグラフ化してみたいと思います。

過去、COM を使ったり(PowerShell で Excel をどうのこうのすることに興味を持ってくれると嬉しい)、ClosedXML を使ったりして(PowerShell で ClosedXML を使って Excel ファイルを作成する) Excel ファイルを作っていましたが、今回は NetOffice を使ってグラフ作成を試してみたいと思います。

6. NetOffice の準備

  • NetOffice のダウンロードと展開
    CodePlex からダウンロードします

    ダウンロード後、適当な場所に展開します。私は今回 C ドライブ直下に展開しました。

  • ダウンロードしたライブラリにはセキュリティの観点からブロックが施されています ので 、ダウンロードした zip ファイルを右クリックしてプロパティを開き、ブロックの解除にチェックを入れて OK ボタンを押します

  • しかし、今回の方法だと .NET 2.0 ~ からのバイナリやドキュメント、ソースコードまで丸ごと入っていて、圧縮された状態で 150MB 程度、展開すると 950MB 程度になりましたので、NuGet が入っている環境なら NuGet から NetOffice.Excel を指定してインストールしたほうが良いかもしれません(未確認)。
    ■ 参考

7. 取得したデータを Excel に保存してグラフで表示する

本手順では、$xls.Visible = $true として Excel を表示させるようにしています。

コマンドを流すと一つ一つ Excel が動作すること確認でき、なかなか楽しいです。

是非、下記のコマンドをコピペでいいので一行づつ PowerShell で実行して頂けたらと思います。

上記コマンドの実行結果は次になりました。


顔文字だと判りにくい… (おい)

考察

粗々ですが一通り試したいことはできました! Emotion API を使えば、ネットから笑顔の misono の写真を取得するという俺得なプログラムが書けそうです。

また、自分が写った過去の写真を Emotion API にかけることで、人生で一番楽しかった時が判るかもしれません(これは怖い)

今回初めて NetOffice を使ってみたのですが、Excel だけではなく、PowerPoint や Word も扱えるようですので、又何かあったら使ってみたいと思います。

11月 042016
 

経緯

Microsoft から対抗 Slack と噂されていたサービスが発表されました。

普段仕事で Office365 を使っている私にとっては、Microsoft Teams はとてもワクワクするサービスですね。

早速ですが Microsft Teams に PowerShell から投稿してみることを試してみました。

検証環境

  • Windows 10 Pro
  • PowerShell 5.0

手順

  • チャネル名の右にある点々をクリックして、コネクタをクリックします

  • Incoming Webhook を探して 追加 をクリックします

  • 名前やアイコンを設定します

  • スクロールして 作成 をクリックします

  • URL が表示されますので、コピーしてテキストエディタにでも貼り付けておきます

  • チャネルの画面に戻ると 3 で付けた名前とアイコンの何者かが参加しています

  • Hello World

    1万年と2000年前から使われるこのフレーズを使います。
    下記コマンドを PowerShell から入力すると画像のように投稿されると思います。

  • Office 356 Connectors API を使って少しリッチな投稿を試す
    成功するとこのような感じで表示されます。
    Office 356 Connectors API は今回始めて使ったのですが楽しいですね。

参考 URL