みやみや

12月 172016
 

2016年12月15日に Windows 7 sp1 を再セットアップ(クリーンインストール)する事があり、その後 Windows Update をかけたところ「更新プログラムを確認しています」と表示されたまま 1 日置いても一向に始まる感じがしなかった為、ググって解決した時の簡単なメモです。

手順

  1. Windows Update の自動更新を止める
    「更新プログラムを確認しています」になってしまうと KB3138612 もインストールできなくなるので、自動更新は一旦止めました

  2. KB3138612 をダウンロードする

  3. 一旦再起動
    手順 1 で止める前に内部で自動更新が動いていると、KB3138612 のインストールも始まらなくなるため

  4. 2 でダウンロードしたファイルを実行(KB3138612 をインストール)する

  5. Windows Update を実行する

考察

Windows 10 への自動更新は、60 過ぎの両親には恐怖だったようで大惨事になってしまいました。
一般の方が、画面に表示される事を全て読んで理解するとは限らないという事を痛いほど判りました _(:3」∠)_

参考

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月 132016
 

Microsoft Teams は 2016 年 11 月に Preview 版として発表された、Office 365 のチャットベースのワークスペースです。

Slack や IRC では IFTTT 等を使ったり、自力でプログラムを組んだりして当たり前のように行われている、「○○さんのツイート」や「ハッシュタグ #△△ のツイート」を指定したチャネルに投稿するのを ノンプログラミングで で行えます。


用意するもの

  • Microsoft Teams にログインできるアカウント
  • Twitter のアカウント ※個人のアカウントとは別で取ったほうが無難だと思います

設定手順

  • 1.Microsoft Teams にログイン後、チャネル右にある点々をクリックして コネクタ をクリックします

  • 2.コネクタの選択画面から Twitter の右にある 追加 をクリックします

  • 3.初めて操作する時には Twitter アカウントにサインインが必要です

  • 4.用意していた Twitter アカウントでログインします

  • 5.コネクタの設定画面が表示されます

    各種設定が終わったら 保存 をクリックします

    • フォロー
      ウォッチしたい Twitter アカウントを入力します。ここでは datmisonoMe_bot さんを設定しています
      複数の時はカンマで区切って設定できますが、全部含めて 50 文字以内 という制限があります(2016/11/13 現在)

    • 追跡
      ウォッチしたいハッシュタグを入力します。ここでは misono を設定しています
      複数の時はカンマで区切って設定できるようですが、全部含めて 140 文字以内 という制限があります(2016/11/13 現在)

    • 通知
      メンションやリツイートも対象とするか設定できます

    • 頻度
      更新頻度を設定できます
      ダイジェストでは、Every 15 minutes, Every 30 minutes, Every hour, Daily, Weekly が選択できます
      都度更新する時には、「新しいツイートが届いたときに個別メッセージを配信する」を選択します


設定確認

設定が終わると、会話にメッセージが表示されます。

設定の確認は、もう一度チャネル右にある点々をクリックして コネクタ をクリックします

Twitter の 追加 の下に 構成済み というリンクがあるのでクリックすると、先程設定したデータとその右に 管理 ボタンが表示されますので、 管理 をクリックします

下記の画像は本コネクタを登録したユーザーで管理画面を開いたときで、他のユーザーで開いたときには 削除しか行なえません


実行結果

これでチャットしながらでも情報収集が行なえますね!

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

10月 232016
 

Excel マクロはタスクスケジューラで実行できるのか

PowerShell でログ収集・精査をして、確認用の Excel に保存する。
「Excel が自分自身でやれよ」と考えてしまい、「そもそも Excel のマクロをタスクスケジューラーから実行できるのかな?」というところから確認してみようと思い試してみました。

体調崩していて暇ですし、ただ試すだけでは面白味にかけたので、ついでに簡易的なパフォーマンスログ取得を行なってみます。「パフォーマンスモニター使えば?」と思われる方もいるでしょうが、楽しくやっているのでそっとしておいて下さい^^;

数カ月ぶりにマクロを触ると作り方等をすっかり忘れていたので、個人的な備忘録としても、私が分かる範囲で少し詳しめに書いてみたいと思います。ご指摘があれば優しくお願い致します。

やること

  • Excel マクロで、CPU、Memory、Disk の状態を取得する
  • Excel マクロをタスクスケジューラーで実行する

検証環境

  • Windows10 Pro
  • Excel 2016

1. マクロ有効ブックの作成

ちなみに作成後のファイルはこちらになります
手っ取り早く試してみたい方は、上記ファイルを使い、 2. タスクスケジューラーへの設定 から読むことをおすすめします。

1-1. 下準備

マクロを作る前に

  1. 上部メニューの ファイル をクリック
  2. 左部メニューの オプション をクリック
  3. Excel のオプションウィンドウ、左部メニュー リボンのユーザー設定 をクリック
  4. 中央部の左リストから 開発 を選択し、 追加 >> ボタンをクリック、その後 OK ボタンをクリック
    開発をする時には、「開発」のリボンを表示した方が便利です。

データ用シートの作成

マクロから行っても良いのですが、1 回しか行わないので手作業で作りました。

  • cpu シート
    書式設定
    A 名前 文字列
    B 使用率 数値
    C 取得日時 ユーザー定義、 yyyy/m/d hh:mm:ss
  • memory シート
    書式設定
    A タイプ 文字列
    B 空き容量 数値
    C 全体容量 数値
    D 取得日時 ユーザー定義、 yyyy/m/d hh:mm:ss
  • シート
    書式設定
    A タイプ 文字列
    B 空き容量 数値
    C 全体容量 数値
    D 取得日時 ユーザー定義、 yyyy/m/d hh:mm:ss

まずはマクロなしの素の Excel ファイルとして保存しました。
ここで作成された Excel ファイルはこちらになります >> performance.xlsx

1-2. マクロを組む

「開発」リボンから、Visual Basic
をクリックすると次のようなウィンドウが開きます。

左のウィンドウにある ThisWorkbook をダブルクリックして、その中にマクロを記述していきます。
今回私が書いたコードはこちらになります >> ThisWorkbook.vbs

需要があるか判りませんが少し説明をしてみます。


Const DISK_NAME = 1
  :
Const CPU_CREATEDAT = 3

最初に各シートで使う列を定数(Const)で宣言しています。

もしソースコード上で列を表す数値を直接書いていると変更に弱くなります(例えば列を入れ替えた時にプログラムの変更箇所が多い等)ので、予め定数として宣言しておきます。

Dim Wmi As Object
今回は CPU、Memory、Disk の各情報を WMI(Windows Management Instrumentation)経由で取得しますので、オブジェクト型として Wmi を定義しています。

Dim CreatedAt As Date
CreatedAt はマクロの実行時間を記録するために使用します。


ファイル(ブック)を開いた時にマクロを自動実行するメソッドです。

Application.WindowState = xlMinimized
起動時に最小化します。

Call Logging
Logging サブルーチンを呼び出しています。


Logging サブルーチンでは、次の処理を呼び出しています。

  1. 初期化処理
  2. CPU 情報の取得とシートへのセット
  3. Memory 情報の取得とシートへのセット
  4. Disk 情報の取得とシートへのセット
  5. 終了処理

Application.DisplayAlerts = False
このような警告メッセージを出さないようにしています。
alert.png

Set Wmi = GetObject( _
“winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2” _
)

WMI をローカルコンピューター(動作させる PC)の root\cimv2 名前空間に接続しています。
VBA で複数行に分けて書きたい時には、上記のように _ (アンダースコア)でつなげます。


終了処理となります。

Set Wmi = Nothing
Wmi オブジェクトの破棄を行います。

ThisWorkbook.Save
ファイルの保存を行います。

If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close
End If

他の Excel ファイルが開かれていない時に Excel の終了(Application.Quit)、他に開いている Excel がある時には今のファイルだけ閉じています(ThisWorkbook.Close)。


SetInfoForCpu は CPU 情報の取得とシートへのセットを行っています。

Row = Sheet.Cells(Rows.Count, CPU_NAME).End(xlUp).Row + 1
データを記録できる行を取得するため、「データのある次の行」を Row にセットしています。

その後 WMI から取得したデータを Cell にセットしていき、最後に使用したオブジェクトを破棄しています。


SetInfoForMemory は Memory 情報の取得とシートへのセットを行っています。
Memory には「物理メモリ」と「仮想メモリ(swap)」があり、物理メモリを PhysicalMemory、仮想メモリを VirtualMemory としてデータをセットしています。


Disk 情報の取得とシートへのセットは CPU と Memory の時とほぼ同じです。

1-3. マクロの保存

名前をつけて保存を行い、ファイルの種類を Excel マクロ有効ブック(*.xlsm) を選択して保存します。
ここで作成された Excel ファイルはこちらになります >> performance.xlsm

2. タスクスケジューラーへの設定

タスクスケジューラーへの設定を試みましたが上手く動いてくれず、調べると全く同じ状態でブログに情報を載せてくださっている方がいました。ありがとうございます!

これらを踏まえて設定していきます。

2-1. タスクスケジューラの起動

タスクスケジューラを起動します。
Cortana に「タスク」と入力したら出てくると思います。

2-2. 設定

  • 操作の タスクの作成 をクリックします。

 

  • 任意の名前を入力
  • ユーザーがログオンしているときのみ実行する を選択

 

  • 設定を 1 回
  • 繰り返し間隔を任意の間隔で入力
  • 継続時間は無期限を選択

 

  • プログラム/スクリプトに次の値を入力
    “C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE”
  • 引数の追加(オプション) に次の値を入力
    <マクロ有効ブックの絶対パス> /e

    • 例: C:\Users\hoge\Desktop\performance.xlsm /e

    /e を付けることで、Excel の起動画面が表示されません。

設定は以上ですので、OK でタスクの作成を完了させて下さい。

3. 実行

テスト実行する時には、登録したタスクを右クリックして「実行する」を選択すると実行されます。
その際、 初回の実行の時にマクロの警告がでますので許可してください。

今回作成したマクロは、起動すると自動で実行して閉じてしまいますので、中のデータを確認する時はマクロが動かないように開く必要があります。

  1. Excel を開く (ファイルをダブルクリックではない)
  2. ファイルを開く時に Shift ボタンを押しながら開く

10-1.png

10-2.png

考察

Windows Server 2008 R2 ですんなり上手く行っていたタスクスケジューラの設定が、Windows 10 で動作が変わっていることに気付くのに 2 時間かかってハマりました。

実際に使う時には、グラフ化しやすいようにデータを取った方が良いですね。

10月 042016
 

経緯

PowerShell 楽しいし、あまり深く考えずに「パフォーマンスモニターを PowerShell でやってみよう」という感じです。

気力が続けば、ここから Excel 出力してグラフ化(Excel 苦手だけど)まで行きたいと思います。

概要設計

  • CPU
  • Memory
  • Disk

上記 3 つの情報を定期的にログに落とす

ココではまずはテキストに TAB 区切りでログを落とすことにする。TAB 区切りは Excel に噛ますのが楽なので採用した。

CPU 情報の設計と取得

CPU 情報の条件としては次の内容で検討

  • CPU 全体、コアごと等の情報を取得できる
  • 使用率は 42.2% のように小数点以下も取得できる

上記の事を踏まえてデータレイアウトは次の通りとした

name(一意の名前) <TAB> persent(使用率) <TAB> get_datetime(取得日時)

Memory の設計と取得

Memory 情報の条件としては次の内容で検討

  • 物理メモリ、仮想メモリ(swap)の情報を取得できる
  • 全体の容量と使用している容量(又は空き容量)を取得できる

上記の事を踏まえてデータレイアウトは次の通りとした

name(Physical or Virtual) <TAB> free(空き容量) <TAB> total(全体容量) <TAB> get_datetime(取得日時)

Disk の設計と取得

Disk 情報の条件としては次の内容で検討

  • 接続されている物理ディスクの情報を取得できる
  • 全体の容量と使用している容量(又は空き容量)を取得できる

上記の事を踏まえてデータレイアウトは次の通りとした

name(Device ID) <TAB> free(空き容量) <TAB> total(全体容量) <TAB> get_datetime(取得日時)

考察

仕様とデータの設計、データの取得までをサーッと作りました。

このままでも Windows タスクスケジューラーに設定してテキストファイルを吐き続けられますが、それでは面白みに欠けるので次回は Excel ファイルに吐くところを作ってみたいと思います。

9月 302016
 

経緯

PowerShell v2.0 の環境でリリース物のチェックが捗らなかったので、勢いに任せて作りました。
恐らく世界で 100 万人ぐらいの人が同じのを作っていることでしょう(てきとー

一応使い方

  • GitHub: miyamiya/mypss の右にある Clone or download をクリックして zip ファイルをダウンロードします。
  • ダウンロードしたライブラリにはセキュリティの観点からブロックが施されています ので 、ダウンロードした zip ファイルを右クリックしてプロパティを開き、ブロックの解除にチェックを入れて OK ボタンを押します
  • zip ファイルを解凍します
  • Get-Md5sum のディレクトリを $Env:PSModulePath で表示される何れかのディレクトリに配置します
    よくあるのは、 C:\Users\ユーザー名\Documents\WindowsPowerShell\Modules に配置

実行