June 25, 2020 • ☕️ 3 min read
今回は業務でPowershellを使う機会が増えてきたので、メモのような形で後から読み返すようなものを書いていく。
なお、エディタに関してはPowershell ISEというものを使用するのが一般的のようだが、Visual Studio code(以降、 VS codeと呼ぶ)の拡張機能でPowershellの実行環境を用意できることから、筆者が使い慣れているVS codeを使用することにする。
Powershellスクリプトファイルの拡張子は、.ps1
である。例として、まずはhello_world.ps1
というテキストファイルを作成して実行してみる。
# hello_world.ps1
write-host Hello world!
そして実行するには、実行したいファイルがあるディレクトリに移動して
hello_world.ps1 (ps1は省略可能)
# 出力結果
Hello world!
Powershellのコマンドは主に、「動詞 - 名詞」となっている。
多くのPowershellコマンドはaliasとしてLinux、MacOSのコマンドが設定されているので、Windowsの操作に慣れていない人でもls
などのコマンドを代わりに使うことができる。
Powershellコマンド | Linux、MacOSコマンド | 実行内容 |
---|---|---|
Get-Location | pwd | カレントディレクトリの取得 |
Set-Location/Push-Location/Pop-Location | cd | ディレクトリの移動、指定 |
New-Item | touch | 新規ファイルの作成 |
New-Item -Type Directory | mkdir | 新規フォルダの作成 |
Get-ChildItem | ls | ファイルの一覧表示 |
Remove-Item | rm | ファイルの削除 |
Copy-Item | cp | ファイルのコピー |
Move-Item | mv | ファイルの移動 |
Rename-Item | mv | ファイルの改名 |
Get-Content | cat/less | ファイルの内容表示 |
実用的なスクリプトを書くためには、もう少し複雑なコマンドを知っておく必要がある。
シェルの実行結果をファイルへ出力するコマンド。
-encoding
でエンコード指定、-append
を入れると追記になる。
"あいうえお" | Out-File sample.txt -encoding UTF8 -append
# パスを取得している場合、シンプルに結果を出力したいだけなら以下の書き方も可能
$newFile = ‘c:\tmp\sample.txt’
"あいうえお" > $newFile
パスから一部のパスを取得するコマンド。
-Parent
で指定したファイルの親パスを取得、-Leaf
で末尾のパスを取得。
Split-Path -Parent C:\Folder1\Folder2\FileA.txt
# 出力結果
C:\Folder1\Folder2
Split-Path -Leaf C:\Folder1\Folder2\FileA.txt
# 出力結果
FileA.txt
メッセージウィンドウを表示して、指定した文字列を選択させるコマンド。
#アセンブリをロードする必要がある
Add-Type -AssemblyName System.Windows.Forms
#実行確認
$result = [System.Windows.Forms.MessageBox]::Show("実行しますか?","確認","YesNo","Question","Button2")
#結果表示
If($result -eq "Yes"){
[void][System.Windows.Forms.MessageBox]::Show("Yesが押されました。","結果","OK","Information")
}Else{
[void][System.Windows.Forms.MessageBox]::Show("Noが押されました。","結果","OK","Information")
}
正規表現で文字列の抽出を行うことができるコマンド。
$sourceFile = ‘C:\tmp\source.txt’
$regex = ‘\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b’
select-string -Path $sourceFile -Pattern $regex -AllMatches -Encoding default
他にも書き残したいコマンドや記法があるので、随時この記事に追記しては更新していく。
Tomoya