Claude Media
install.ps1でSystem.Xml.XmlDocument is not recognizedと出る原因

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. 1

    irmが応答を取得する

    本来はインストールスクリプトのテキストが返るはずの場所で、別のページ(XMLとして読める応答)が返ります。

  2. 2

    応答がXMLオブジェクトになる

    XMLとして解釈できたため、irmは文字列ではなくSystem.Xml.XmlDocument型のオブジェクトを返します。

  3. 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/latest

1行目が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つです。

  1. 数分待って、元のコマンドを再実行する。一時的な障害のことが多いとされています。
  2. WinGetでインストールする。PowerShellインストーラーとは別の経路で、更新の仕組みも違います。
winget install Anthropic.ClaudeCode

WinGet経由のインストールは、ネイティブインストールと違って既定では自動更新されません。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.cmd

CMDでも「< 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が返る具体的な理由(どのページが返ったか)は、ドキュメントにも載っていません。再試行と到達性の診断が、実際に手を動かせる切り分けになります。

この記事を共有:XはてブLinkedIn