PowerShell 関連のメモ

PowerShell 関連のメモを置いておきます。

curl で HTTPステータスコードを取得

# 正常
Write-Output(curl -sf -o nul -w "%{http_code}" https://www.google.com/)
# 200

# 存在しないページ
Write-Output(curl -sf -o nul -w "%{http_code}" https://www.google.com/aaaaa)
# 404

# サーバが見付からない
Write-Output(curl -sf -o nul -w "%{http_code}" https://example.comuuuuuuuun)
# 000

例えばこんな感じ。

……ところで、最後のそもそもサーバが見付からない場合のHTTPステータスコードは 000 と出力されとなると、これは Integer とかではなく String ということですよね?

確認します。

$hoge = curl -sf -o nul -w "%{http_code}" https://www.google.com/
$fuga = curl -sf -o nul -w "%{http_code}" https://www.google.com/aaaaa
$piyo = curl -sf -o nul -w "%{http_code}" https://example.comuuuuuuuun

Write-Output $hoge.GetType().FullName
# System.String
Write-Output $fuga.GetType().FullName
# System.String
Write-Output $piyo.GetType().FullName
# System.String

やはり。

Test-NetConnection の戻り値

続いて Test-NetConnection の戻り値について。

$hogera = Test-NetConnection 192.0.2.1 -Port 25
Write-Output($hogera.GetType().FullName)
# TestNetConnectionResult

これは専用のオブジェクトですかね。

Write-Output(Test-NetConnection 192.0.2.1 -Port 25)

# ComputerName     : 192.0.2.1
# RemoteAddress    : 192.0.2.1
# RemotePort       : 25
# InterfaceAlias   : Ethernet
# SourceAddress    : 192.0.2.101
# TcpTestSucceeded : True

通常、 Test-NetConnection はこのような結果を返すので、それぞれがプロパティ名であると推測できます。であれば……。

$hogera = Test-NetConnection 192.0.2.1 -Port 25
Write-Output($hogera.GetType().FullName)
Write-Output($hogera.TcpTestSucceeded)
# True
Write-Output($hogera.TcpTestSucceeded.GetType().FullName)
# System.Boolean

やはり。プロパティ TcpTestSucceeded を持ち、その値は Boolean 型ですね。

ということは、 Test-NetConnection の結果を直接 Return するラッパー関数を用意してあげれば汎用的に取り回せそうです。

DNS の名前解決

try {
    $result = Resolve-DnsName -Name www.example.co.jp -Server 192.0.2.1 -NoHostsFile -QuickTimeout
    return $True
}
catch {
    return $False
}

ドメイン・DNSサーバ指定。 hosts ファイル不使用。なお、タイムアウト時はエラーになるので try ... catch でエラーハンドリングしておきます。

コンソールのエラーを非表示にする

$ErrorActionPreference = 'silentlycontinue'

参考

PowerShell の命名規則

curl

Test-Connection, ping

Test-NetConnection

型を調べる

コンソールのエラーを非表示にする

DNS の名前解決

if文 の And

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。