LoginSignup
14
14

More than 5 years have passed since last update.

ログオン・ログオフ時にPowerShellを起動しSlackへ通知する【Windows7】

Last updated at Posted at 2015-05-01

PowerShellからSlackに通知する方法が投稿されていたので、出社・退社をログオン・ログオフでSlackに記録したいなー。
手動でSlackに入れていたら見事に3日坊主でした。

PowerShellの準備

動作環境は
【メモ】PowerShell書き始めるまで
使用するプログラムは
PowerShellからSlackに通知する方法
で紹介されているままのプログラムでOK。
最初は固定メッセージで2個作ってましたが、登録時にパラメーターを設定できるので引数でメッセージを変えられます。

ログオン・ログオフ時の登録

調べればすぐに出ますが…
1. スタートメニューからポリシーで検索
2. グループポリシーの編集

  • ユーザーの構成
    • Windowsの設定
      • スクリプト(ログオン/ログオフ)
      • 右窓のログオン/ログオフをダブルクリック
        • ログオン/ログオフのプロパティ
        • PowerShellスクリプト タブ
        • 追加
          • スクリプト名:参照から作成したプログラム
          • スクリプトのパラメーター:通知したいメッセージ

Slack APIを使用する

Slackに通知はできたが、Incoming WebHooksでは(名前を同じにしても)BOTが行った通知になってしまう。
できれば既存のユーザーが通知したことにしたい。
調べたら2月頃にSlack APIにas_userなるオプション追加が追加されたらしい。
任意のユーザーではなく、「Slack APIのトークンを発行したユーザー」として通知できるらしい。
全員で使うには全員がトークン発行しなければならない……
トークンの発行は権限に関係なくできるのかな?(未調査)
まぁ、今は一人なので無問題ですが。

トークンのとーろく

Slack APIを使ってプッシュ通知を受け取ろう
を見てその通りに。

  1. IntegrationsからSlack APIを選択
  2. 左メニューからWeb APIを選択
  3. 最下層にトークン発行ボタン「Create token」があるのでおもむろにクリック

Slack APIに飛んだらSlack APIの説明画面でちょっと面食らいます。
トークン発行もその画面で出来ないので慌ててぐぐりました。

TOPIC:chat.postMessageのテスト

slackに通知する主機能?なchat.postMessageのドキュメントから動作テストのページに飛べます
トークン発行後なら実際にSlackへ通知することができるので、どんな動作やURLになるかなど、軽い検証ができます。

Slack API PawerShell

Slack APIになり、メソッドがPOSTからGETになりました。
よって、パラメーターはJSONからURLに付加する形になります。

Slack_API版
$utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($args)
$text = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($utf8Bytes);
$channel = "xxx" # #ramdom
$token = "xxx"
$text = [System.Web.HttpUtility]::UrlEncode($text)

Invoke-RestMethod -Uri "https://slack.com/api/chat.postMessage?token=$token&channel=$channel&as_user=true&text=$text" -Method Get

参考にしたIncoming WebHooks版と比較して、
1. 入力をURLエンコードしている
2. バイト文字列から文字列への変換時のコードをISO-8859-1からUTF-8に変更

2に関してはなぜこうしなければならないのか、が最初のUTF-8バイト文字列での取得から理解していないので調査しておきます。
ISO-8859-1では文字化けが起こりました。

Slack API版はシェル上では成功してますが、ログオン・ログオフ時の動作は未検証です。明日にでも問題なくこの文章を消せたらいいな。


追記
今さらですが、うまく動いています。
BOT表記もなくなっているので、見た目では自分が発言しているように見えます。
ただし、環境によっては(スタートアップ量?)PowerShellの実行優先度が低いのか、ログインから数分以上あとに発言されることも…
Slack上では遅刻魔に!みたいなこともあるかもしれません。


今は毎回同じメッセージなので、複数のパラメーターを渡してランダムに通知してくれるようにしたい。

14
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14