Box CLI 使ってみた
弊社の定型作業をBoxCLIを使用し、スクリプト化したので記載
まず開発環境を整える
Box CLIをインストール
※引用:Box CLIはターミナルウィンドウまたはコマンドプロンプトからBox APIにリクエストを行うためのツールです。
要は、Boxの作業をコマンドで出来ますよってことです。
以下のリンク先にインストールする案内が記載されてます。
Box Developerのページに戻り、以下の赤文字部分を確認する
※要ログイン
PowerShellを起動し、以下を入力
box login -n test
IDとパスワードを求められるので、先ほどの赤文字部分を入力
これで開発環境が整いました。
実際に開発作業
PowerShellの知識については、調べたらわかるので割愛。
ChatGptに任せたら作成してくれるし、そんな苦労しないと思う。
作成したサンプルスクリプト
試しに指定したフォルダから最新のフォルダをコピーし、新たに最新のフォルダを作成するスクリプトを作成した
エラー処理もしていないし、汎用化できるようにもしていないので、サンプルとして見てもらいたい
このスクリプトの前提条件
ファイル階層イメージ
- 1階層
- 指定するフォルダ
- 2階層
- 名前が
yyyyMMdd
+Name
のフォルダ群
- 名前が
- 3階層
- 名前が
Name
+yyyyMMdd
のファイル単品
- 名前が
スクリプトの固定値説明
-
userID
にはBoxのユーザID(アカウントID)を入力 -
targetFdID
には指定したフォルダIDを入力 -
constFolderName
には作成するフォルダ名のName
を入力 -
constFileName
には作成するファイル名のName
を入力 -
constFileExtension
には作成するファイルの拡張子をドット付きで入力
# 固定値
$userID = 012345678910
$targetFdID = 123456789
$constFolderName = "Test"
$constFileName = "Test"
$constFileExtension = ".xlsx"
$today = Get-Date -Format "yyyyMMdd"
$folderName = $today + $constFolderName
$fileName = $constFileName + $today + $constFileExtension
# 以下処理
#Boxログイン
box configure:environments:switch-user $userID
# 指定されたフォルダIDから最新のフォルダIDを取得
$parentFdJson = box folders:items $targetFdID --json --sort=date --fields=name
$parentFdObjects = $parentFdJson | ConvertFrom-Json
$parentFdObjects | ForEach-Object {$_.name = $_.name.substring(0, 8); $_ }
$parentFdOfNewData = $parentFdObjects | ForEach-Object { $_.name } | Sort-Object -Descending | Select-Object -First 1
$parentFdOfNewID = ($parentFdObjects | Where-Object {$_.name -eq $parentFdOfNewData}).id
# 最新のフォルダから新規フォルダをコピー
box folders:copy $parentFdOfNewID $targetFdID --name=$folderName
# 作成されたフォルダのIDを取得
$createdFdJson = box folders:items $targetFdID --json --sort=date --fields=name
$createdFdObjects = $createdFdJson | ConvertFrom-Json
$createdFdObjects | ForEach-Object {$_.name = $_.name.substring(0, 8); $_ }
$createdFdData = $createdFdObjects | ForEach-Object { $_.name } | Sort-Object -Descending | Select-Object -First 1
$createdFdID = ($createdFdObjects | Where-Object {$_.name -eq $createdFdData}).id
# 作成されたフォルダ内にあるファイルのIDを取得
$createdFdInFileJson = box folders:items $createdFdID --json --sort=date --fields=id
$createdFdInFileObjects = $createdFdInFileJson | ConvertFrom-Json
$createdFdInFileID = $createdFdInFileObjects | ForEach-Object { $_.id }
# 取得したファイルIDを使用し、ファイル名を変更する
box files:rename $createdFdInFileID "`"$fileName`""
処理の説明については、コメントを参照してほしい。
ChatGptに読み込ませたら一文一文の説明までしてくれると思う。
上記のスクリプトをWindows PowerShell ISE
でコピペして保存すれば、PowerShellスクリプトファイル(.ps1
)が作成される
作成したスクリプトをタスクスケジューラで自動実行させる
タスクスケジューラの登録方法については割愛。
ただ、PowerShellスクリプトのps1
ファイルをタスクスケジューラで実行させるには一手間必要
- プログラム/スクリプト
PowerShellを起動し、以下のコマンドでPowerShellのパスを取得し、貼り付け
where.exe powershell
- 引数の追加
作成したスクリプトの絶対パスを -Command "C:~"
形式で入力
※以下、参考リンク
これで実行できるので、あとはタスクスケジューラで実行したいタイミング等を設定する
実行確認したいなら、作成したタスクを「右クリック→実行する
」的な選択でできる。
お疲れ様でした。