アラサーからのプログラマー生活

アラサーの新米PGが必死に頑張る成長記録です。あとは旅行とか。

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

ご無沙汰しています、堀井です。
現場で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に戻っていますね。

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



備忘録がてらの記事なので短めです。

月4更新とか言っていた気がするがスマン、ありゃ嘘だ。

それではまた次回。