Powershell 新元号換算スクリプト


#スクリプトが仕事や生活に役立つのはカレンダー操作と元号換算

スクリプトで業務が改善するのは
***決まった要素を違う形にアウトプットする***
***曖昧な入力を判定して補ってくれる***
という点でしょう。計算機で計算するにしても打ち間違えが発生します。しかしスクリプトでは決まった数を代入して式ごとに計算します。これをパワーシェルでやってみましょう。

#スクリプト
新元号は平成31年からなのでマイナス表示させる。
昭和換算も欲しい。
年度当初の次の年の4月1日から年単位の期間を求めたい。
それを平成と西暦で表示したい
このスクリプトは %Userprofile%\onedrive\ドキュメント\hoge\Ps_kikan.ps1とする

```ps1:ps_kikan.ps1
param (
        [parameter(mandatory=$true)][Int32]$heisei,
        [parameter(mandatory=$true)][Int32]$kikan
    )

if($heisei -gt 100){
$heisei =$heisei-1988
Write-Host "昭和に換すると"+([string]($heisei+1988-1925))
Write-Host "平成に換すると"+[string]$heisei
Write-Host "新元号に換すると"+([string]($heisei+1988-1988- 30))
}Else{
Write-Host "昭和に換すると":([string]($heisei+1988-1925))
Write-Host "新元号に換すると":([string]($heisei- 30))
}

Write-Host "西暦":([string]($heisei+1988))
Write-Host "期間開始西暦":([string]( $heisei+1))"/4/1"
Write-Host "期間開始平成":([string]( $heisei+1988+1))"/4/1"
Write-Host "期間満了日西暦":([string]($heisei+1988+$kikan+1)) "/3/31"
Write-host "期間満了日平成":([string]($heisei+$kikan+1)) "/3/31"
Write-host "期間満了年度平成":([string]($heisei+$kikan))
Write-host "期間満了年度西暦":([string]($heisei+1988+$kikan))
```
これを保存したらPoweshellを立ち上げて（ISEで呼び出してもよい）
PS:C:\****>
コマンドプロンプトが現れたら
Set-executionpolicy remotesigned -s process -f;cd \$env:userprofile\OneDrive\ドキュメント\hoge;./Ps_Kikan.ps1 -heisei 26 -kikan 5
昭和に換すると : 89
新元号に換すると : -4
西暦 : 2014
期間開始西暦 : 27 /4/1
期間開始平成 : 2015 /4/1
期間満了日西暦 : 2020 /3/31
期間満了日平成 : 32 /3/31
期間満了年度平成 : 31
期間満了年度西暦 : 2019
するとこんな結果が表示されます。
見栄えは悪いですが、必要な情報がこのように一気に入手できます。
##あいまいさ（西暦入力）対応
このスクリプトは西暦で入れても動くようにしています。
Set-executionpolicy remotesigned -s process -f;cd \$env:userprofile\OneDrive\ドキュメント\hoge;./Ps_Kikan.ps1 -heisei 2014 -kikan 5
平成の部分を西暦で入れてしまうと次のようになります。

昭和に換すると : 89
平成に換すると : 26
新元号に換すると + -4
西暦 : 2014
期間開始西暦 : 27 /4/1
期間開始平成 : 2015 /4/1
期間満了日西暦 : 2020 /3/31
期間満了日平成 : 32 /3/31
期間満了年度平成 : 31
期間満了年度西暦 : 2019
こうした自分のいい加減さにも対応できるのがスクリプトの強いところです。
これで一度に10個の回答が得られました。

#長所
このようにスクリプトで計算させるのは自分が知りたい項目を自分が知りたい形式で出力させることができる点です。
またパワーシェルの場合はCMD.exeより結果のコピペが簡単です。
XPを使うなら別ですがOSのヴァージョンにも大して関係がありません。オフィスがなくても使えます。整数の計算で西暦の計算なら演算誤差もありません。あとは新元号が決まったら新元号にスクリプトを書き換えましょう。単純ですが、スクリプトを1度書いてしまうと何年でも使えてしまう強力なものになります。かけた労力に対してベネフィットが大きいのです。

##蛇足 Functionを定義したいとき
さて、式が複雑になってくると、計算する部分はどうしても関数にしたくなります。
それでは関数の場合はどのように書けばよいのか。
Function Hokan(\$heisei,\$kikan){}でくるみ、下にkikan \$heisei \$hozon
と書くとよいです。

```ps1:Ps_Kikan.ps1
param (
        [parameter(mandatory=$true)][Int32]$heisei,
        [parameter(mandatory=$true)][Int32]$kikan
    )
Function Hokan($heisei,$kikan){
if($heisei -gt 100){
$heisei =$heisei-1988
Write-Host "昭和に換すると":([string]($heisei+1988-1925))
Write-Host "平成に換すると":([string]$heisei)
Write-Host "新元号に換すると"+([string]($heisei+1988-1988- 30))
}Else{
Write-Host "昭和に換すると":([string]($heisei+1988-1925))
Write-Host "新元号に換すると":([string]($heisei- 30))
}

Write-Host "西暦":([string]($heisei+1988))
Write-Host "期間開始西暦":([string]( $heisei+1))"/4/1"
Write-Host "期間開始平成":([string]( $heisei+1988+1))"/4/1"
Write-Host "期間満了日西暦":([string]($heisei+1988+$kikan+1)) "/3/31"
Write-host "期間満了日平成":([string]($heisei+$kikan+1)) "/3/31"
Write-host "期間満了年度平成":([string]($heisei+$kikan))
Write-host "期間満了年度西暦":([string]($heisei+1988+$kikan))

} #End of Function hokan
hokan $heisei $kikan

```

###関数にしたときに忘れがちな点
すべてのスクリプトを始動させる命令は必ず1番下に書く。スクリプトを最後まで読み込んで動いているらしく、トップや途中で始動させるとエラーになる。
引数は順番に並べ、引数名は使わない