1週間前に殴り書いた下書きなせいか、何をしたかったのか思い出せない…
あと、以下の記事ではなんか関数化しているけど、関数かどうかは特に関係なく使えると思う。
そして何で関数にしたのかも思い出せない。先週は残業祭りで嫌な記憶しかない…
【以下は1週間前に書いたらしい記事です(記憶喪失)】
元ファイル
function returntest() {
return "192,168,0,1", "タイムアウト", "ラウンド トリップ"
}$hoge = @(returntest)
#Containsメソッドで検索するために配列に変換if ($hoge.Contains("ラウンド")) {
Write-Host "戻り値にラウンド トリップが含まれています"
} else {
Write-Host "そんなものはない"
}
実行ファイル
. ".\\returntest.ps1"
if ($hoge[0] -eq "192,168,0,1") {
Write-Host "正解"
} else {
Write-Host "違います"
}if ($hoge[1] -eq "タイムアウト") {
Write-Host "正解"
} else {
Write-Host "違います"
}if ($hoge[2] -eq "ラウンド トリップ") {
Write-Host "正解"
} else {
Write-Host "違います"
}
@()で括って配列化したものを、Containsメソッドで検索させる。全角(日本語)、半角スペース、カンマ問題なく検索可能。
これでもできるっちゃできるが、Containsでは部分検索ができないようで、該当の文字列に完全一致しないとFalseになる。
色々やってみたら、別に配列にしなくても、match演算子をつければ検索できた。
これなら、無理矢理配列にする必要もない。
改修後
function returntest2() {
return "192,168,0,1", "タイムアウト", "ラウンド トリップ"
}$hoge = returntest2
#-matchで部分検索ができることがわかったので、配列化は不要if ($hoge -match "192,168,0,1") {
Write-Host "戻り値にIPアドレスが含まれています"
} else {
Write-Host "そんなものはない"
}
ファイルの中身を検索する場合は、Get-Contentを変数に格納する
$file = Get-Content "C:\tmp\20190305\param.txt"
#paramの中にはpingとか書いてあるif ($file -match "ping") {
Write-Host "ありまぁす!"
} else {
Write-Host "そんなものはない"
}