2018年09月

Poweshellのコマンドを忘れたときに

コマンドを忘れた

Get-Command

コマンドレッドのヘルプを表示する

Get-help

オブジェクトの構造を表示する

Get-member
#パイプで受けることも可能
dir C:\Work | Get-Member

オブジェクトの型を表示する

$obj.GetType()

Poweshellでちょっスクレイピング

Invoke-WebRequestコマンドレット

webページの取得

$response = Invoke-WebRequest "取得したいサイトのURL"

※IEエンジンを使用するためInvoke-WebRequestコマンドレットを使用するには過去に最低1回はIEを起動させていないとエラーになる。

HTML文字列を取得

$response.Content

HTMLパース

指定したタグ要素を取得する

$response.ParsedHtml.IHTMLDocument3_getElementsByTagName("タグ名")

※getElementsByNameでも取得できるが、HRESULT からの例外エラーになる場合があった。

指定したクラス以下の要素を取得する

$response.ParsedHtml.getElementsByClassName("クラス名")

※こちらもHRESULT からの例外エラーになる場合があった。

使用例

ヤフーの株価を取得

$response = Invoke-WebRequest "https://stocks.finance.yahoo.co.jp/stocks/detail/?code=4689.T"
$price=$response.ParsedHtml.IHTMLDocument3_getElementsByTagName("TD") | Where-Object {($_.className -eq "stoksPrice")}
$price.innerText

価格.COM HDD人気ランキング

文字化けしてしまうが、とりあえず取得は出来た。

$response = Invoke-WebRequest "http://kakaku.com/pc/hdd-35inch/"
$ranking=$response.ParsedHtml.getElementsbyClassname("pmItemRank aMerge")

#改行で区切って配列にする 
$tb= $ranking.item().innertext.split("`n")

File Manager APIを利用して複数ファイルをまとめてアップロード

詳細は以下ヘルプサイト
File Manager API について

ライブドアブログで複数のファイルをまとめてアップロードしたい場合、Webの管理画面からでは1ファイルずつしかファイルを選択出来ないため、File Manager APIを利用したファイルアップロードの方法をメモ。

準備

curlコマンドが必要のためWSLにインストール

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install curl

File Manager API

ブログ設定-API Keyから

を控える

curlコマンドの実行

アップロード先のディレクトリIDを確認する

ルートディレクトリの一覧を取得

curl -X POST https://livedoor.blogcms.jp/blog/ブログ名/file_manager/list -H 'Expect:' -H 'X-LDBlog-Token:File Managery用パスワード'

以下のような結果が出力されるので該当ディレクトリのidを控える

{"name":"ディレクトリ名","is_dir":1,"id":"0000","is_file":0,"is_root":0}

指定したディレクトリ以下の一覧を取得

-F dir_id ディレクトリID

curl -X POST https://livedoor.blogcms.jp/blog/ブログ名/file_manager/list -H 'Expect:' -H 'X-LDBlog-Token:File Managery用パスワード' -F 'dir_id=0000'

以下目的のディレクトリIDが取得できるまで繰り返す。

ディレクトリの新規作成

-F 'name=' ディレクトリ名
-F 'dir_id=' ディレクトリID

curl -X POST https://livedoor.blogcms.jp/blog/ブログ名/file_manager/create_dir -H 'Expect:' -H 'X-LDBlog-Token:File Managery用パスワード' -F 'name=dir_name' -F 'dir_id=0000'

ファイルのアップロード

-F 'dir_id=' ディレクトリID
-F 'name=' 登録するファイル名(省略時はアップロードファイルと同名のファイル名になっていたが、ヘルプにはContent-Disposition filenameが使用されると記載があった。)
-F 'upload_data=@/mnt/c/work/file.txt' 先頭に@を付けないとエラーになった。 multipart/form-data 形式で POSTするようにとの記載があったがよくわからない。

curl -X POST https://livedoor.blogcms.jp/blog/ブログ名/file_manager/upload -H 'Expect:' -H 'X-LDBlog-Token:File Managery用パスワード'-F 'dir_id=000' -F 'upload_data=@/mnt/c/work/00_blog/js/highlightjs/styles/agate.css'

あとはアップロードファイルを1か所にまとめてbashコマンドで処理してやれば良い

find /mnt/c/work/ | xargs -I% curl -X POST https://livedoor.blogcms.jp/blog/ブログ名/file_manager/upload -H 'Expect:' -H 'X-LDBlog-Token:File Managery用パスワード'-F 'dir_id=000' -F 'upload_data=@%'

PowerShellのコマンドレットでタスクスケジューラに登録

Ppweshellでタスクスケジューラ登録.md

コマンドレッド

登録されているタスクを表示

Get-ScheduledTask

タスクの作成

タスクの編集・削除

New-ScheduledTaskTrigger

コマンドオプション

-Once
1回だけ実行する
-Atlogon
ログイン時に実行する
-AtStartup
起動時に実行する
-Daily
毎日実行する
-At
実行する時間を指定する
"00:00:00"形式のほか"5pm"や"5:30pm"といった形式も指定可能
-Week
毎週実行する
-DaysOfWeek
実行する週を指定する(Friday,Monday,Saturday,Sunday,Thursday,Tuesday,Wednesday)

実行例

毎日8時に実行

New-ScheduledTaskTrigger -daily -at "08:00:00"

指定した日時に1度だけ実行

New-ScheduledTaskTrigger -Once -At "2018/09/01 00:00:00"

ログオン時に実行

New-ScheduledTaskTrigger -AtLogon

New-ScheduledTaskAction

-Execute
実行するプログラムを指定する
-Argument
実行するプログラムの引数を指定する
-WorkingDirectory
プログラム実行時に一時ファイルなどを保存するフォルダを指定する

実行例

Powershellコマンドレットを実行

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-Command write-host hello"

※コマンドプロンプトを実行したい場合は"PowerShell.exe"を"cmd.exe"に書き換える。
 また、バッチファイル等も指定可能。

Register-ScheduledTask

コマンドオプション

-TaskName
タスクの名前を指定する
-Action
実行するプログラムを指定する
-Trigger
実行する条件を指定する
-TaskPath
タスクの保存場所を指定する
-User
実行するユーザを指定する
-Password
ユーザのパスワードを指定する

実行例

New-ScheduledTaskTriggerで作成した条件とNew-ScheduledTaskActionで作成したアクションを組み合わせてスケジュール登録を行う

$trigger = New-ScheduledTaskTrigger -Once -At "20:45" $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-Command write-host hello Read-Host `"続けるには Enter キーを押してください`"" Register-ScheduledTask -TaskName "Task_Hello" -Trigger $trigger -Action $action

一度登録したタスクを更新する場合は -Forceオプションをつけることでタスクの上書きが可能。

Set-ScheduledTask

コマンドオプション

-TaskName
タスク名
-Action
実行するプログラムを指定する
-Trigger
実行する条件を指定する
-TaskPath
タスクの保存場所を指定する
-User
実行するユーザを指定する
-Password
ユーザのパスワードを指定する

実行例

$trigger = New-ScheduledTaskTrigger -Once -At "18:55" $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-Command write-host hello Read-Host `"Enter キーを押してください`"" Set-ScheduledTask -TaskName "Task_Hello" -Trigger $trigger -Action $action

Unregister-ScheduledTask

コマンドオプション

-TaskName
タスク名
-AsJob
確認メッセージを表示しない

実行例

Unregister-ScheduledTask -TaskName "Task_Hello"

タスクの有効・無効、実行・停止

Enable-ScheduledTask
Disable-ScheduledTask
Start-ScheduledTask
Stop-ScheduledTask

コマンドオプション

-TaskName
タスク名

実行例

Enable-ScheduledTask -TaskName "Task_Hello" Disable-ScheduledTask -TaskName "Task_Hello" Start-ScheduledTask -TaskName "Task_Hello" Stop-ScheduledTask -TaskName "Task_Hello"

VSCodeでGASの開発

GAS開発環境.md

そんなに複雑なプログラムは書けないのでブラウザ上のエディタで特に不便は感じていないが手順だけメモしておく

準備

以下の環境をインストール

Node.js
npm(パッケージ管理システム)が必要になるため
インストールオプションはデフォルトでOK
Gitクライアント
VSCodeで開発するだけなら恐らく不要
インストールオプションはデフォルトでOK
google/clasp
Node.jsをインストールした後、コマンドからインストール
次の手順で説明

Apps Script APIの有効化

https://script.google.com/home/usersettings
上記URLにアクセスし、Google Apps Svript APIの設定を オンにしておく。

CLI Tool Claspのインストール

コマンドプロンプト上で以下を入力

npm install -g @google/clasp

Googleアカウントにログイン

clasp login

ブラウザが起動してGoogleへのログイン画面が表示されるので自分が使用するユーザでログインする

プロジェクトの作成

新規作成

  1. 適当なフォルダを作成する
    mkdir c:\GAS\GAS_Project
  2. コマンドプロンプトから作成したフォルダに移動する
    cd c:\GAS\GAS_Project
  3. プロジェクトを作成する
    clasp create GAS_Project

.clasp.jsonとappsscript.jsonの2つのファイルが作成される。 また、Apps Scriptのページにプロジェクトが作成される

クローン

既に作成済のプロジェクトをローカルで編集する場合はclone機能を使う。

clasp clone [スクリプトID]

スクリプトIDは対象のプロジェクトページメニュー項目から
[ファイル]-[プロジェクトのプロパティ]-[情報タブ]
スクリプトID欄から取得出来る。

コードのダウンロード

クローン作成時にコードがダウンロードされない場合や、 Webでコードを追加・編集した場合は以下のコマンドでコードを取得する。
プロジェクトを作成したフォルダで実行する。

clasp pull

コードは拡張子'.js'でダウンロードされる。

コードのアップロード

プロジェクトを作成したフォルダで実行する。

clasp push

スクリプトエディタを開く

以下のコマンドでブラウザのスクリプトエディタが起動する。

clasp open

補足

VSCode上で[表示]-[ターミナル]
からターミナルを表示させれば、VSCodeのみでプロジェクトやクローンの作成を行うことが出来る。

デフォルトのターミナルはPowewrShellになっていたので

[ファイル]-[基本設定]-[設定]
'ユーザー設定'欄に以下の記述を加え、ターミナルをコマンドプロンプトに変更した。

"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe" VSCode_SettingR2

参考にしたサイト

WindowsでMarkdownエディタをセットアップする