powershell

PowerShell備忘録

PowerShellってLinuxのシェルやDosでのバッチファイルで「スクリプト言語」を覚えた身としてはどうも「すんなり」頭に入ってこない、、しかも何かと「キータイプが多くなる」イメージがあって「そら」で叩けないんです。。。

備忘録

バージョンの確認方法

以下へ移動しました

スクリプトファイルの文字コードについて

現在主流であるとおもわれるV5.1では(Windows10/11デフォルトはv5.1という事で)スクリプトをShift-JISで記載しておけば基本(PowerShellから他に連携する際はまた別の話)文字化けないです。
utf-8で記載する事も可能ですがbom付ファイルで保存しないと日本語が文字化けする点注意必要です。それに対しv6以降のバージョンではShift_JISで記載されたスクリプトでは文字化けが発生するのでutf-8bom有無どちらかに変換する必要があります。今後の流れを予想するに基本はutf-8 bom無しで良いと思います。

New-TemporaryFile コマンドレットで一時ファイル作成

自身で削除しないといけませんが、重複しない名前のファイルを作成してくれます。作成フォルダは以下の環境変数を変更する事で自由に設定可能です。

次の順序で環境変数の存在をチェックし、見つかった最初のパスを使用します。
Windows プラットフォームでは、次の手順を実行します。
1.TMP 環境変数で指定されたパス。
2.TEMP 環境変数で指定されたパス。
3.USERPROFILE 環境変数で指定されたパス。
3.USERPROFILE 環境変数で指定されたパス。

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/new-temporaryfile?view=powershell-7.3
$env:TMP="D:work\temp"
$tmpfile = New-TemporaryFile
# ここに適宜処理を入れます
Write-Host $tmpfile
Remove-Item -Path $tmpfile
PS D:\work> $env:TMP="D:work\temp"
PS D:\work> $tmpfile = New-TemporaryFile
PS D:\work> # ここに適宜処理を入れます
PS D:\work> Write-Host $tmpfile
D:\work\temp\tmpE024.tmp
PS D:\work> Remove-Item -Path $tmpfile
PS D:\work>

エスケープシーケンスが他の言語と異なりバッククォート(`)です

通常「¥」がバッククォートですが、PowerShellではバッククォート()がエスケープシーケンスになっています。そのため改行を`n」とか「`r`n」などと記載する事となります

ls 日付順出力が大変、、

昇順
ls | Sort-Object { $_.LastWriteTime }
降順
ls | Sort-Object -Descending { $_.LastWriteTime }

Get-Content 指定ファイルの内容出力

PS C:\oha-yo\powershell> Get-Content .\sample01.sql
select now();
select pg_get_functiondef((select max(t.oid) from pg_proc t ,pg_namespace n
where t.pronamespace = n.oid
and n.nspname = 'sooni'
and t.proname = 'destination'))
;
PS C:\oha-yo\powershell>

% { } は ForEach-Object{ }と同じ意味

PS C:\temp>  @('りんご', 'みかん', 'バナナ') | % {Write-Host $_}
りんご
みかん
バナナ
PS C:\temp>  @('りんご', 'みかん', 'バナナ') | foreach {Write-Host $_}
りんご
みかん
バナナ
PS C:\temp>

関数名を付ける際に推奨されている事

PowerShell コマンドに承認されている動詞 - PowerShell
PowerShell コマンドに承認されている動詞
スポンサーリンク