はじめに
PowerShellの研修を行う際に、提出されたスクリプトの中身をある程度機械的に採点できないだろうか、と思うことがありまして、以前、ブログ記事の見出し要素を調べた時のように、Power Queryで出来そうだったのでやってみました。
同じケースでのニーズは少ないと思うのですが、「複数のテキストファイルの中身を一括で分析したい」というケースでは応用が利くのではないかと思い、記事に残したいと思います。
本記事では、まずはフォルダ内にある複数のファイルの中身を読み取るところまで進めます。
サンプルスクリプトを用意
即興で適当なスクリプトを作ってみました。サンプルファイルの番号を調べて分類するだけです。
$files = Get-ChildItem foreach($file in $files){ if($file.Name -match '^.*[1-4].pptx'){ Write-Host $file.Name "は1から4番のファイル" } elseif($file.Name -match '^.*[5-8].pptx'){ Write-Host $file.Name "は5から8番のファイル" } else{ Write-Host $file.Name "はその他のファイル" } }
これを複製して、微妙に中身を変えたファイルをいくつか用意しておきます。
フォルダの読み込み
ブログ記事の見出し要素を調べた時はCSVファイル内にソースが全て入っていたのですが、今回は、スクリプトファイルが分かれています。
そのため、ファイルではなくフォルダとして読み込みます。
対象のファイルを指定します。
この段階ではコンテンツは読み込めていないのですが、気にせずそのままデータの変換に移ります。
いったん、リストとして読み込みました。
コンテンツの表示
コンテンツを表示するためには、Content列の「Binary」の横にある「↓↓」のようなボタンをクリックします。
行は分かれてしまうのですが、気にせず読み込みます。
これで、各ファイルの中身を読み取ることが出来ました。
列が分かれてしまった場合
今回のテスト用のスクリプトでは発生しなかったのですが、このように列が分かれてしまうことがあるようです。
区切り記号を固定長にして値を0にすると、1列におさめる事が出来ます。
注意点
コンテンツ表示後、もともとフォルダを読み込んだ時の更新日時などの情報は変換処理がかかって使えなくなってしまいます。それらの活用をしたい場合は、別途読み込みなおす必要がありそうです。
おわりに
記事が長くなってしまったので、いったん、ファイルを読み込むところまでで区切りました。
次の記事では、実際にPower Queryを使って読み込んだスクリプトに含まれる特定の語句を分析していきたいと思います。
舟越 匠(日本ビジネスシステムズ株式会社)
人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。2024年8月からキーマンズネットでPower Automateの連載を開始。好きなサービスはPower AutomateやLogic Apps。好きなアーティストはZABADAKとSound Horizon。
担当記事一覧