PowerShellを触り始めたら思いのほか楽しかった話

※この記事の初版は2021年1月でした。

現場でPowerShellを使うことになり勉強していたのですが、意外と身近な手間を省くのに使えるかもしれないなと思って、作ってみました

フォルダ構造を難解化させてしまったことに対応するために、
デスクトップに置いた特定の名前のファイルを自分で難解化させたフォルダに移動させる
というもっと改善仕様がある部分を全て無視してコーディング欲を満たすために作り始めましたとさ。

完成品は続きからどうぞ。
設計、製造、テスト込みで1時間強で作ったと思います。


#-------------------------------------------------------------------
#   ファイル名
#       moveFile.ps1
#   処理内容
#       ファイルを所定のフォルダに移動します
#       対象ファイル -> yyyymm.exp
#-------------------------------------------------------------------
#-- 定数宣言
Set-Variable -Name afterMovingFileName -Value "C:\Users\移動先パス" -Option Constant

#-- 変数宣言
[int]   $errCode              = 0
[string]$fileName             = (Get-Date -Format "yyyyMM") + ".exp"
[string]$beforeMovingFileName = Join-Path ("C:\Users\移動元パス") $fileName

#-------------------------------------------------------------------
#   chkErr
#       エラーチェックを行います
#-------------------------------------------------------------------
Function chkErr() {
    if ( !( Test-Path $beforeMovingFileName ) ) {return 1}      #-- ファイルの存在確認
    return 0
}
#-------------------------------------------------------------------
#   printErrMsg
#       エラーチェックを行います
#-------------------------------------------------------------------
Function printErrMsg( [int]$errCode ) {
    switch ( $errCode ) {
        1 {echo ファイルが存在しません}
        default {echo 想定外のエラーが発生しました}
    }
}
#-------------------------------------------------------------------
#   メイン処理
#-------------------------------------------------------------------
$errCode = chkErr       #エラーチェック
if( $errCode -ne 0 ) { printErrMsg($errCode); exit }
Move-Item $beforeMovingFileName $afterMovingFileName
echo 正常に終了しました

.ps1で保存してPowerShellから叩いていただければいいのですが、多分権限的なあれやこれやでNG食らうかもしれません。

f:id:hollage0214:20210116014547p:plain

.\ファイル名.ps1: File [ファイルフルパス].ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.

権限的なあれやこれやです。

Get-ExecutionPolicyのコマンドを叩くとRestrictedになっているかと思いますので、

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

のコマンドを叩くと、ローカル環境でのシェルは、永続的に警告スルーで実行できるようになります。

そんなに権限いらないよ!と言う方は

Set-ExecutionPolicy RemoteSigned -Scope Process

のコマンドを叩くと、ローカル環境でのシェルは、現在のプロセスを終了するまで警告スルーで実行できるようになります。


ローカル環境で、と言っていますがインターネットから拾ってきたシェルはデジタル署名が必要となるとのことです。

実際に試してみるとこんな感じ。

f:id:hollage0214:20210116015439p:plain

これで一時的に使えるようになったので、一度終了し再びPowerShellを起動して確認します。

f:id:hollage0214:20210116015502p:plain

Restrictedに戻っていますね。

自分のパソコンでないならこちらの方がいいと思います。

コメントする