認証プロキシ内で Install-Module が上手く行かなかったときの解決方法

# 1. 概要

認証プロキシ内で PowerShell が上手く動かなかったので、「サクッと直すかー」と思って対応してたら、二重三重の罠があって意外と苦労したので、ここにその試行錯誤を公開する。

# 2. `Install-Module` が成功するまでの試行錯誤

## 2.1 エラー「モジュールをインストールするには、管理者権限が必要です」の対処

- 対処方法 : 管理者権限で PowerShell を起動させる。
- 備考 : PowerShell あるある
- コマンド実行結果 :

```powershell
PS C:\Users\username> Install-Module -Name ImportExcel
Install-Module : 'C:\Program Files\WindowsPowerShell\Modules' にモジュールをインストールするには、管理者権限が必要です
。管理者権限のあるアカウントを使用してコンピューターにログオンしてから、もう一度やり直すか、コマンドに "-Scope CurrentU
ser" を追加して 'C:\Users\username\Documents\WindowsPowerShell\Modules' をインストールしてください。また、Windows PowerS
hell セッションを管理者特権で実行する方法もあります ([管理者として実行])。
発生場所 行:1 文字:1
+ Install-Module -Name ImportExcel
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Install-Module]、ArgumentException
    + FullyQualifiedErrorId : InstallModuleNeedsCurrentUserScopeParameterForNonAdminUser,Install-Module

PS C:\Users\username>
```

## 2.2 エラー「"https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409" にアクセスできない。」の対処

- 原因 : `Install-Module` が認証プロキシに対応していない
- 対処方法案 :
     - モバイルルータ / テザリングで接続する
     - 認証プロキシ爆○くん を使う

## 2.3 エラー「"https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409" にアクセスできない。」の対処2

- エラー発生の原因 : SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした
- 対処内容 : TLS1.2 を有効化
- コマンド : 
  - `[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3, [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls12`
- 参考URL : [https://wsbs.wordpress.com/2020/04/15/nuget-がmsgunabletodownload-エラーでインストールできない！/](https://wsbs.wordpress.com/2020/04/15/nuget-がmsgunabletodownload-エラーでインストールできない！/)
- コマンド実行結果

```powershell
PS C:\Windows\system32> Install-Module -Name ImportExcel

続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\username\AppData\Local\PackageManagement\ProviderAssemblies'
に配置する必要があります。'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet
プロバイダーをインストールすることもできます。今すぐ PowerShellGet で NuGet
プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):
警告: URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' から '' へダウンロードできません。
警告: 利用可能なプロバイダーの一覧をダウンロードできません。インターネット接続を確認してください。
PackageManagement\Install-PackageProvider : プロバイダー 'NuGet' について、指定された検索条件に一致するものが見つかりま
せんでした。パッケージ プロバイダーには 'PackageManagement' タグと 'Provider' タグが必要です。指定されたパッケージにこ
れらのタグがあるかどうかを確認してください。
発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7405 文字:21
+ ...     $null = PackageManagement\Install-PackageProvider -Name $script:N ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-Pac
kageProvider]、Exception
    + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackagePro
vider

PackageManagement\Import-PackageProvider : プロバイダー名 'NuGet' について、指定された検索条件に一致するものが見つかり
ませんでした。'Get-PackageProvider -ListAvailable' を使用して、このプロバイダーがシステム上に存在するか確認してください
。
発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7411 文字:21
+ ...     $null = PackageManagement\Import-PackageProvider -Name $script:Nu ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (NuGet:String) [Import-PackageProvider]、Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.ImportPackageProv
ider

警告: URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' から '' へダウンロードできません。
警告: 利用可能なプロバイダーの一覧をダウンロードできません。インターネット接続を確認してください。
PackageManagement\Get-PackageProvider : パッケージ プロバイダー 'NuGet' が見つかりません。まだインポートされていない可
能性があります。'Get-PackageProvider -ListAvailable' を実行してみてください。
発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7415 文字:30
+ ... tProvider = PackageManagement\Get-PackageProvider -Name $script:NuGet ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...PackageProvider:GetPackageProvider) [Get-PackageProvi
der], Exception
    + FullyQualifiedErrorId : UnknownProviderFromActivatedList,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPacka
geProvider

Install-Module : NuGet ベースのリポジトリを操作するためには、NuGet プロバイダーが必要です。'2.8.5.201' 以降のバージョン
の NuGet プロバイダーがインストールされていることを確認してください。
発生場所 行:1 文字:1
+ Install-Module -Name ImportExcel
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Install-Module]、InvalidOperationException
    + FullyQualifiedErrorId : CouldNotInstallNuGetProvider,Install-Module

PS C:\Windows\system32>
PS C:\Windows\system32> wget "https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409"
wget : 要求は中止されました: SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした
発生場所 行:1 文字:1
+ wget "https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce
    ption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

PS C:\Windows\system32>
PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol
Tls12
PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3, [Net.SecurityPro
tocolType]::Tls, [Net.SecurityProtocolType]::Tls12
PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls, Tls12
PS C:\Windows\system32>
PS C:\Windows\system32> Install-Module -Name ImportExcel

続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\username\AppData\Local\PackageManagement\ProviderAssemblies'
に配置する必要があります。'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet
プロバイダーをインストールすることもできます。今すぐ PowerShellGet で NuGet
プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
PackageManagement\Install-Package : 指定された検索条件とパッケージ名 'ImportExcel' と一致するものが見つかりませんでした
。登録されている使用可能なすべてのパッケージ ソースを確認するには、Get-PSRepository を使用します。
発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1772 文字:21
+ ...          $null = PackageManagement\Install-Package @PSBoundParameters
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Ex
ception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
    + 
PS C:\Windows\system32>
```


## 2.4 エラー「Powershell のリポジトリに何も登録されていない」の対処

- 対処 : `Register-PSRepository -Default`  + TLS 1.2 を有効化
- 実行するコマンド

```powershell
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3, [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls12
Register-PSRepository -Default
```

- コマンド実行結果

```powershell
PS C:\Windows\system32> Get-PSRepository
警告: パッケージ ソースが見つかりません。
PS C:\Windows\system32> wget "https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409"
wget : 要求は中止されました: SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした
発生場所 行:1 文字:1
+ wget "https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce
    ption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls
PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3, [Net.SecurityPro
tocolType]::Tls, [Net.SecurityProtocolType]::Tls12
PS C:\Windows\system32> [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls, Tls12
PS C:\Windows\system32> wget "https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409"

StatusCode        : 200
StatusDescription : OK
Content           : ?<?xml version="1.0" encoding="utf-8"?>
                    <SoftwareIdentity xmlns="http://standards.iso.org/iso/19770/-2/2015/schema.xsd" xmlns:xsi="http://w
                    ww.w3.org/2001/XMLSchema-instance" xmlns:discovery="http://p..."
RawContent        : HTTP/1.1 200 OK
                    Age: 31478
                    Content-MD5: 01uMBNqAHedJsS1dqKC5oA==
                    Vary: Accept-Encoding
                    X-Cache: HIT
                    x-ms-blob-type: BlockBlob
                    x-ms-lease-status: unlocked
                    x-ms-request-id: b25f2755-f01e-009b-471...
Forms             : {}
Headers           : {[Age, 31478], [Content-MD5, 01uMBNqAHedJsS1dqKC5oA==], [Vary, Accept-Encoding], [X-Cache, HIT]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : System.__ComObject
RawContentLength  : 1847



PS C:\Windows\system32> Get-PSRepository
警告: パッケージ ソースが見つかりません。
PS C:\Windows\system32> Register-PSRepository -Default
PS C:\Windows\system32> Get-PSRepository

Name                      InstallationPolicy   SourceLocation
----                      ------------------   --------------
PSGallery                 Untrusted            https://www.powershellgallery.com/api/v2


PS C:\Windows\system32>
```

## 2.5 `Install-Module ImportExcel` の成功

- コマンド実行結果

```powershell

PS C:\Windows\system32> Install-Module ImportExcel
PackageManagement\Install-Package : 指定された検索条件とパッケージ名 'ImportExcel' と一致するものが見つかりませんでした
。登録されている使用可能なすべてのパッケージ ソースを確認するには、Get-PSRepository を使用します。
発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1772 文字:21
+ ...          $null = PackageManagement\Install-Package @PSBoundParameters
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Ex
ception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

PS C:\Windows\system32> Get-PSRepository
警告: パッケージ ソースが見つかりません。
PS C:\Windows\system32> Register-PSRepository -Default
PS C:\Windows\system32> Get-PSRepository

Name                      InstallationPolicy   SourceLocation
----                      ------------------   --------------
PSGallery                 Untrusted            https://www.powershellgallery.com/api/v2


PS C:\Windows\system32> Install-Module ImportExcel

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

PS C:\Windows\system32>
```

# 3. 感想

とりあえず、ぶつかった問題とその解決策を書きました。
余計なコマンドも結構ありますが、これを参考にして認証プロキシに悩む、誰かの助けになれば幸いです。
あと、PowerShell の実行結果がすごく見づらいのどうすれば良いの？