PowerShellでNTLM認証の必要なWebページを取得

社内サイト等、NTLM認証が必要なページをPowerShellで取得する方法を調べたのでメモ。

Get-Credentialコマンドレットをやると対話的に資格情報を取得・利用できるが、そうではなく今Windowsにログオンしているユーザの今持っている資格情報を使い回す方法について。
StackOverflowにずばりの投稿があった。

$urlTarget = "http://some.localdomain/somepage.html";

$cc = [System.Net.CredentialCache]::DefaultNetworkCredentials;
$cred = $cc.GetCredential($urlTarget, "Ntlm");

$req = [System.Net.HttpWebRequest]::Create($urlTarget);
$req.Credentials = $cred;
$res = $req.GetResponse();

$r = New-Object -TypeName "System.IO.StreamReader" -ArgumentList @($res.GetResponseStream());
$content = $r.ReadToEnd();
$r.Close();
$r.Dispose();
$r = $null;
$res.Dispose();

Write-Host $content;

上記はWebページ自体にNTML認証がある場合だが、WebProxy.Credentialsに設定すればNTLM認証が必要なプロキシも利用できると思われる。

また、今回の答えではなかったが、[System.Security.Principal.WindowsIdentity]::GetCurrent()で資格情報が取得できるので、これも何かに使えそう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です