PowerShell スクリプトで nslookup を実行し、出力を解析可能な文字列変数に割り当てたいと考えています。CMD の実行から PowerShell ウィンドウに "Non-authoritative answer:" のようなエコーが表示されたくないのですが、コマンドの出力を排他的に変数にパイプまたはリダイレクトしようとしても、うまくいかなかったり、変数が破損したりしませんでした。 .
例:
PS> $temp = (& nslookup 'myip.opendns.com','resolver1.opendns.com');
Non-authoritative answer:
いくつかの回避策を試しました...
PS> $temp = Invoke-Expression "cmd /c nslookup myip.opendns.com resolver1.opendns.com" >$null
PS> $temp = Invoke-Expression "cmd /c @ECHO off && nslookup myip.opendns.com resolver1.opendns.com"
たぶん、これを行うためのより良い方法があります。ここで IP アドレスを取得するためだけに文字列を操作する方法は、必要以上に数行多くなります。
$temp = (nslookup myip.opendns.com resolver1.opendns.com) | Out-String
$temp = $temp.split()
$tempIPs = $temp -match "^(.|\r|\n)*?\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b"
$publicIP = $tempIPs[1]
return $PublicIP
nslookup で行っているように、2 つのサーバーを使用すると、powershell の Resolve-DnsName コマンドが機能しないように見えるため、このルートを使用しました。ルックアップをリダイレクトしてパブリック IP を取得するため、2 つのサーバーが必要です。それを行う方法は他にもありますが、これは非常にうまく機能(invoke-WebRequest ifconfig.me/ip).Content
し、このスクリプトの作業中にエラーが発生しました。