技術関連の覚書

案件でやったり自宅で試したことの覚書

Powershellの使いみちまとめ(なにかやるごとにここに追記してく)

サーバーはLinuxでも開発はWindowsでやることが多く、設計後に設計書から自動でソースなどを起こすようなスクリプトPowershellで作る機会が増えてきたのでまとめることにする Pythonとかだと楽なんだろうなあ

ファイル操作

UTF8Bom無しでテキストを出力する

$encode = New-Object Systen.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($outputfile, "出力テキスト", $encode)

$encodeを変えれば出力エンコードが変えられる テキストは$()で出力する関数から出力するようにすれば長いテキストも出力できる

※リダイレクトではUTF16になってしまう

関数で値を返す方法

Write-Output "テキスト"

関数からテキストを返す場合、Powershellにはreturnがないので、一度Write-Outputなどで出力させ、呼び出し元では$()で囲ってやる必要がある

function outText(){
    Write-Output("出力したいテキスト")
}

$(outText)

数値を文字列に変換したい場合は

[string]を使って文字列に変換する

function add($a, $b){
    $c = $a + $b
    Write-Output("演算:"+[string]$c)
    Write-Output("連結"+[string]$a + [string]$b)
}

add 100 200

演算:300
連結:100200

検索

grepっぽいもの

Select-String "検索したい文字列" ファイル名 Select-String -Pattern "正規表現" ファイル名

置換

"文字列".Replace("変えたい文字列","変更する文字列") "文字列" -Replace "正規表現","変える文字列" 正規表現の表し方は、.、\w+ エスケープ文字は\でなくなので、"をエスケープする場合は" .は0文字以上の文字列、は前のパターンの繰り返しなのでこの2つで任意の文字列になる。 \wは任意の単語、+で繰り返すので単語の羅列になる 囲み文字の注意点は、""(.*)"","`$1"にした場合、一番外側の""だけが置換されることになる "aaa","bbb"のようなCSV形式ならaaa","bbbと置換されてしまう

部分置換する場合、"(グループ).*","`$1"で()グループが取り出せる