Azure CloudShellの起動時のエラー

Azure CloudShellの起動時のエラー

```powershell
Requesting a Cloud Shell.Succeeded. 
Connecting terminal...

Import-Module: /opt/microsoft/powershell/7/profile.ps1:13
Line |
  13 |  Microsoft.PowerShell.Core\Import-Module -Name PSCloudShellUtility
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | This module requires Az.Accounts version 2.16.0. An earlier version of Az.Accounts is imported in the current PowerShell session. Please open a new session before importing this module. This error could indicate that multiple incompatible versions of the Azure
     | PowerShell cmdlets are installed on your system. Please see https://aka.ms/azps-version-error for troubleshooting information.
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:308
Line |
 308 |  & ($script:PSCloudShellUtilityModuleInfo){Get-CloudShellTip -ErrorAct …
     |    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
VERBOSE: Authenticating to Azure ...
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:64
Line |
  64 |      & ($script:PSCloudShellUtilityModuleInfo){param([string]$Label, [ …
     |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
Invoke-CloudShellTelemetry: /opt/microsoft/powershell/7/profile.ps1:95
Line |
  95 |          Invoke-CloudShellTelemetry -LogLabel "GETSUBSCRIPTIONID" -Sta …
     |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:64
Line |
  64 |      & ($script:PSCloudShellUtilityModuleInfo){param([string]$Label, [ …
     |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:64
Line |
  64 |      & ($script:PSCloudShellUtilityModuleInfo){param([string]$Label, [ …
     |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
Import-Module: /opt/microsoft/powershell/7/profile.ps1:382
Line |
 382 |      Microsoft.PowerShell.Core\Import-Module -Name AzurePSDrive
     |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | This module requires Az.Accounts version 2.16.0. An earlier version of Az.Accounts is imported in the current PowerShell session. Please open a new session before importing this module. This error could indicate that multiple incompatible versions of the Azure
     | PowerShell cmdlets are installed on your system. Please see https://aka.ms/azps-version-error for troubleshooting information.
VERBOSE: Building your Azure drive ...
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:64
Line |
  64 |      & ($script:PSCloudShellUtilityModuleInfo){param([string]$Label, [ …
     |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
New-PSDrive: /opt/microsoft/powershell/7/profile.ps1:393
Line |
 393 |      $null = Microsoft.PowerShell.Management\New-PSDrive -Name Azure - …
     |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find a provider with the name 'SHiPS'.
WARNING: Something went wrong while creating Azure drive. You can still use this shell to run Azure PowerShell commands.
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:64
Line |
  64 |      & ($script:PSCloudShellUtilityModuleInfo){param([string]$Label, [ …
     |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:406
Line |
 406 |  & ($script:PSCloudShellUtilityModuleInfo){Set-CloudShellPSReadLineKey …
     |    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
InvalidOperation: /opt/microsoft/powershell/7/profile.ps1:64
Line |
  64 |      & ($script:PSCloudShellUtilityModuleInfo){param([string]$Label, [ …
     |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
```

[Troubleshooting Module Loading With Azure PowerShell](https://github.com/Azure/azure-powershell/blob/main/documentation/troubleshoot-module-load.md#potential-reason-1-older-version-stored-in-user-or-global-scope)によると、
PowerShellは複数のバージョンのモジュールをインストールすることが出来る。通常は、は```Import-Module -RequiredVersion <version>```を使用して特定のバージョンをロードするように指示しない限り、モジュールの最新バージョンをロードする。しかし、```PSModulePath```の複数のディレクトリにモジュールがインストールされている場合、予期しない結果になることがある。PowerShell がモジュールパスでモジュールを検索すると、PSModulePath の後続のディレクトリにそれ以降のバージョンのモジュールがインストールされていても、モジュールが表示される最も古いパスコンポーネントに格納されている最新バージョンが返される。
とのこと。
自分の環境で以下のコマンドを実行すると、
```powershell
Get-InstalledModule Az.Accounts -AllVersions
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734886/a8a16867-c6f2-5a56-badb-7817e98f33c5.png)
のように返ってきて、確かに複数のバージョンをインストールしているようだ。（いつのまにこんなことになったのかわからないが。）

Githubの記事によれば、グローバルスコープ ```%ProgramFiles%PowerShell</Modules>```にない Azure PowerShell コマンドレットのすべてのバージョンを削除すればよいらしい。
ので削除してみる。
```powershell
rm -rf ~/.local/share/powershell/Modules
```
削除コマンドを実行後、新しいセッションでCloudShellを起動してみたらエラーが出なくなった。
入っているバージョンを確認してみたら、2.16.0のみになっていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734886/44d8cce1-c402-1b15-cf24-791d52a4266d.png)

解決した。