⚡
Azure Functions で Resolve-DnsName を使えるようにする
Resolve-DnsName
が使えない
Azure Functions で いろいろあって Resolve-DnsName
を Azure Functions で叩きたいねぇと思いまして。
シンプルに以下のような PowerShell script を実行してみます。
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
Resolve-DnsName www.microsoft.com.
わーっといろいろ怒られるんですが、とりあえずそういうコマンドはないと言われています。
ただ、これは手元の Windows 11 PC では起こることはありません。
2022-05-27T12:01:57.997 [Error] ERROR: The term 'Resolve-DnsName' is not recognized as the name of a cmdlet, function, script file, or operable program.
で、$env:PSModulePath
を確認してみます。
$env:PSModulePath -split ';'
結果は以下のとおりです。
なんかやたらシンプルだなという感じです。
2022-05-27T12:05:13.301 [Information] OUTPUT: C:\home\site\wwwroot\Modules
2022-05-27T12:05:13.303 [Information] OUTPUT: C:\Program Files (x86)\SiteExtensions\Functions\4.3.2\workers\powershell\7\Modules
手元の Windows 11 PC の場合にはもうちょっと数が多いです。
PS C:\Users\xxxxxxxx> $env:PSModulePath -split ';'
C:\Users\xxxxxxxx\OneDrive - Microsoft\Documents\PowerShell\Modules
C:\Program Files\PowerShell\Modules
c:\program files\powershell\7\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
C:\Program Files (x86)\Microsoft Azure Information Protection\Powershell
で、Resolve-DnsName
は C:\Windows\system32\WindowsPowerShell\v1.0\Modules
に入ってます。
Azure Functions 側にあるかどうか確認してみたらどうもファイルとしてはありそうなので、じゃあ足してやりゃいいじゃんということで。
$Env:PSModulePath
を足そう
Azure Functions の # Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
$Env:PSModulePath = $Env:PSModulePath+";C:\Windows\system32\WindowsPowerShell\v1.0\Modules"
Resolve-DnsName www.microsoft.com.
こうすれば叩けるようになっちゃいます、やったね!
今回は所用があって smtp.sendgrid.net の IP アドレスが欲しかったので以下のような感じになります。
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
$Env:PSModulePath = $Env:PSModulePath+";C:\Windows\system32\WindowsPowerShell\v1.0\Modules"
$r = Resolve-DnsName smtp.sendgrid.net.
$r | % {$_.IPAddress}
結果はこんな感じ。
2022-05-27T12:10:09.448 [Information] OUTPUT: 13.114.210.107
2022-05-27T12:10:09.449 [Information] OUTPUT: 52.220.95.193
参考リンクはこちら。
-
$Env:PSModulePath
の確認の仕方
-
$Env:PSModulePath
の追加の仕方 (大した話ではないんですが)
ちなみに PowerShell で | %
は ForEach-Object
の alias
となってます。
Ruby でいう .map
とか .collect
みたいな感じで便利っすね。
PS C:\Users\kasakemi> alias %
CommandType Name Version Source
----------- ---- ------- ------
Alias % -> ForEach-Object
Discussion