install.ps1でSystem.Xml.XmlDocument is not recognizedと出る原因
PowerShellのインストールでSystem.Xml.XmlDocument is not recognizedと出るのは、irmが受け取った応答がスクリプトではなかった合図です。ParserErrorとの見分け方と対処を示します。
System.Xml.XmlDocument is not recognizedは「別のページが返っている」合図
Windowsでirm https://claude.ai/install.ps1 | iexを実行したとき、次のエラーが出ることがあります。
System.Xml.XmlDocument : The term 'System.Xml.XmlDocument' is not recognized as the name of a cmdlet, function, script
file, or operable program.結論から言うと、このエラーはPowerShellやClaude Codeの設定ミスではありません。irmがダウンロードしたものが、インストールスクリプトではなかったことを示しています。インストールスクリプトはPowerShellのコードで、XMLとしては解釈できないためです。
型名の前後の英文は、PowerShellのバージョンやシステム言語で変わります。変わらないのはSystem.Xml.XmlDocumentという型名そのものなので、照合はそこで行います。
なぜ型名が「コマンドとして認識されない」と言われるのか
irmはInvoke-RestMethodの別名です。応答をXMLとして解釈できたとき、テキストではなくXMLオブジェクトを返します。パイプの先のiex(Invoke-Expression)は、渡されたものを文字列として実行しようとします。ここで実行対象になるのが、そのオブジェクトの型名です。
エラーが出るまでの流れ
- 1
irmが応答を取得する
本来はインストールスクリプトのテキストが返るはずの場所で、別のページ(XMLとして読める応答)が返ります。
- 2
応答がXMLオブジェクトになる
XMLとして解釈できたため、
irmは文字列ではなくSystem.Xml.XmlDocument型のオブジェクトを返します。 - 3
iexが型名を実行しようとする
iexはSystem.Xml.XmlDocumentをコマンド名として探し、見つからないのでis not recognizedで止まります。
つまり「System.Xml.XmlDocumentというコマンドが無い」ことが問題なのではなく、そのオブジェクトが現れた時点で、手元に届いた応答が想定と違っているのが問題です。
ParserErrorなどのパースエラーとの見分け方
install scriptが別のページを返す失敗は、PowerShellでは2つの形で現れます。どちらも原因は同じで、エラーに映る中身が違うだけです。
| 見え方 | エラー文の特徴 | 応答の中身 |
|---|---|---|
| パースエラー | エラー文の特徴Missing argument in parameter list、Missing expression after unary operator '--'、ParserError、ParseException。引用部分にHTMLタグやCSSが混じる | 応答の中身XMLとして読めないWebページ |
| 型名エラー | エラー文の特徴System.Xml.XmlDocumentがis not recognizedと言われる。ページの中身は引用されない | 応答の中身XMLとして読める応答 |
パースエラーの側は、iexがHTMLやCSSをPowerShellのコードとして読み込もうとして崩れた結果です。エラー文の引用部分を見れば、HTMLだと分かります。型名エラーの側はページの中身が一切引用されないので、エラー文だけでは何が返ったのか分かりません。
CMDで同じ失敗をすると、< was unexpected at this time.に続いて返ってきたページのHTMLが表示されます。1行目はシステム言語で表示されるため、後ろに続くHTMLの有無で判断します。bashやzshではsyntax error near unexpected tokenで、<!DOCTYPE html>のような1行目が引用されます。HTMLやbash側の切り分けはinstall scriptがHTML/403を返す原因と対処にまとめています。
-OutFileで保存し直しても同じ
「いきなり実行するから失敗する。いったんファイルに落とせばいい」と考えて、irmに-OutFile install.ps1を付ける方法があります。インストールのトラブルシューティングページでも、この方法では解決しないとされています。保存されるのは同じWebページで、拡張子が.ps1になるだけだからです。
実行前に中身を確かめる習慣自体は有効です。保存したファイルをエディターで開き、1行目が<で始まっていればHTMLを疑えます。スクリプトの代わりに別ページを受け取っているので、保存してもそのファイルは実行できません。
原因の切り分け: まず応答の中身を見る
次に確認するのは、インストーラーの配布元に届いているかどうかです。Windows PowerShellではcurlがInvoke-WebRequestの別名で、-sIを受け付けません。curl.exeと、実行ファイルを明示して呼びます。
curl.exe -sI https://downloads.claude.ai/claude-code-releases/latest1行目がHTTP/1.1 200 OK(WindowsのcurlでのHTTP/1系の表示)なら、配布元には届いています。結果の読み分けは次のとおりです。
curl.exeの結果から見る原因
403
プロキシやネットワークフィルターが配布元を止めているか、Claude Codeが利用地域で提供されていない状態です。エラー出力に
App unavailable in regionと引用されていれば、後者です。5xx
多くはサービス側の一時的な問題です。数分待って再試行します。
出力なし・Could not resolve host・タイムアウト
ネットワークが接続を止めています。原因には、企業のファイアウォールやプロキシ、地域のネットワーク制限、TLSやCA証明書の問題が挙がっています。
届いているのにインストールだけ失敗する場合も、ネットワークや地域的なルーティング、一時的なサービス障害が原因として挙がっています。社内のプロキシ越しなら、HTTPS_PROXYとHTTP_PROXYを設定してから実行し直します。
$env:HTTP_PROXY = 'http://proxy.example.com:8080'
$env:HTTPS_PROXY = 'http://proxy.example.com:8080'
irm https://claude.ai/install.ps1 | iexプロキシのアドレスが分からないときは、IT担当者に確認するか、ブラウザーのプロキシ設定を見ます。
実行前に応答の型を確かめる方法
iexに渡す前に、irmが何を返したかを見たい場合は、結果を変数に受けて型を表示する方法があります。ドキュメントの手順ではなく、実行しないで確かめるための一例です。
$r = irm https://claude.ai/install.ps1
$r.GetType().FullNameスクリプトが返っていれば、型は通常の文字列(System.String)になります。System.Xml.XmlDocumentと表示されたら、今回のエラーと同じ状態です。この2行はiexを呼ばないので、何度試してもインストールは始まりません。
対処: 再試行か、別のインストール方法へ
ドキュメントにある対処は2つです。
- 数分待って、元のコマンドを再実行する。一時的な障害のことが多いとされています。
- WinGetでインストールする。PowerShellインストーラーとは別の経路で、更新の仕組みも違います。
winget install Anthropic.ClaudeCodeWinGet経由のインストールは、ネイティブインストールと違って既定では自動更新されません。macOSのHomebrewと並べて、この点が注意事項として書かれています。終わったら新しいターミナルを開き、claude --versionで確かめます。2.1.211 (Claude Code)のようにバージョン番号が出れば完了です。claudeが見つからないと言われたら、インストールしたセッションは古いPATHを持ったままなので、新しいウィンドウで試します。
プロキシやファイアウォールが原因のときは、WinGetも同じホストに届く必要がある点に注意が必要です。403が続くなら、先に到達性の診断を済ませるよう案内されています。WindowsのインストールをWSLも含めて選び直したいときは、Windowsのインストール方法の比較も参考になります。
状況別に見る、最初に打つ手
同じエラーでも、PCの置かれた環境で最初の一手が変わります。
| 環境 | 疑う順番 | 最初の一手 |
|---|---|---|
| 自宅PC・普段は動いていた | 疑う順番一時障害 → ルーティング | 最初の一手数分待って再実行。それでも駄目ならcurl.exe -sIで状態コードを見る |
| 会社のPC | 疑う順番プロキシ・ファイアウォール | 最初の一手curl.exe -sIの結果が403や無応答なら、IT担当者にプロキシのアドレスとdownloads.claude.aiの許可を確認する |
| VPNやクラウドの環境 | 疑う順番地域のルーティング | 最初の一手地域のネットワーク制限への対処にVPNや別のネットワークが挙がっているので、接続元を変えて試す |
| 海外から利用している | 疑う順番利用地域の対象外 | 最初の一手エラー出力にApp unavailable in regionがあれば、対応国の一覧で確認する |
型名エラーでは、ページの文面がエラーに出ません。「地域制限の一文を読めば原因が分かる」という通常の流れが使えないため、curl.exe -sIで状態コードを先に見る手順が、他のパターンより重みを持ちます。
CMDのインストーラーでも結果は変わらない
PowerShellで失敗したからと、CMDインストーラーに切り替える人もいます。
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmdCMDでも「< was unexpected at this time.とHTML」の形で同じ失敗が起きます。配布元から別のページが返っているなら、PowerShellでもCMDでも条件は同じです。シェルを変える前に、到達性の診断を先に済ませたほうが無駄がありません。
別の原因で似た見た目になる失敗
型名エラーと混同しやすく、原因が異なる失敗が3つあります。
| エラー | 原因 | 対処 |
|---|---|---|
'irm' is not recognized | 原因PowerShellではなくCMDで実行している | 対処PowerShellを開き直すか、CMD用のインストーラーを使う |
The token '&&' is not a valid statement separator | 原因PowerShellでCMD用のコマンドを実行した | 対処irm https://claude.ai/install.ps1 | iexを使う |
A parameter cannot be found that matches parameter name 'fsSL' | 原因macOS/Linux用のcurl -fsSLをPowerShellで実行した | 対処PowerShell用のインストーラーを使う |
見分けの目安は、エラー文がSystem.Xml.XmlDocumentではなく、コマンド名やトークンを指していることです。これらはコマンドの取り違えなので、応答の中身を調べる必要はありません。インストーラーが走ったあとの失敗は、また別の切り分けになります。全体の流れはClaude Codeのインストールエラー対処で確認できます。
実行ポリシーのrunning scripts is disabled on this systemも別物です。これはnpmが作る.ps1ランチャーが対象で、irm ... | iexのようにダウンロードしたテキストを直接実行する方法には影響しません。
再実行しても同じなら、変えるのは経路
数分おいて再実行しても同じ型名が出るなら、同じ入口から同じ応答を受け取り続けています。繰り返しても結果は変わらないので、経路を変えます。接続元のネットワークを変える(別回線やテザリング)、プロキシを設定する、WinGetに切り替える、の3つです。どれが効くかは、curl.exe -sIの結果が決めます。403なら接続元かプロキシ、5xxなら待つ、無応答ならネットワーク設定です。
判断の手順
System.Xml.XmlDocumentが出たときの動きを、順に並べます。
- 型名のエラーかどうかを確認する(
System.Xml.XmlDocumentが見えていれば、スクリプトが届いていない) curl.exe -sIで配布元に届くかを確かめる- 200なら数分待って再試行する。403・無応答なら、プロキシや地域を疑う
- 急ぐ場合は
winget install Anthropic.ClaudeCodeを使う
このエラーに固有の原因として挙がっているのは、応答がスクリプトではないことだけです。XMLが返る具体的な理由(どのページが返ったか)は、ドキュメントにも載っていません。再試行と到達性の診断が、実際に手を動かせる切り分けになります。