Azure Cloud Shell の PowerShell のクイックスタート

このドキュメントでは、Azure Portal で Cloud Shell の PowerShell を使う方法について詳しく説明します。

Azure Cloud Shell の PowerShell エクスペリエンスは、Linux 環境で PowerShell 7.2 として利用できるようになりました。 Cloud Shell での PowerShell エクスペリエンスは、Windows PowerShell と比較して違いがあります。

Linux のファイルシステムでは大文字と小文字が区別されます。 Windows では、file.txtFILE.txt が同じファイルと見なされます。 Linux では、これらは異なるファイルと見なされます。 ファイルシステムでのタブの入力中は、大文字と小文字を適切に区別する必要があります。 タブ入力、コマンドレット名、パラメーター、値など、PowerShell 固有のエクスペリエンスでは大文字と小文字は区別されません。

相違点の詳細な一覧については、「Windows 以外のプラットフォームでの PowerShell の相違点」を参照してください。

Cloud Shell の起動

  1. Azure Portal 上部のナビゲーション バーの [Cloud Shell] ボタンを選択します

    Azure portal から Azure Cloud Shell を起動する方法を示すスクリーンショット。

  2. ドロップダウンで PowerShell 環境を選択すると、Azure ドライブ (Azure:) になります

    Azure Cloud Shell 用の PowerShell 環境を選択する方法を示すスクリーンショット。

PowerShell コマンドを実行する

次のように、通常の PowerShell コマンドを Cloud Shell で実行します。

PS Azure:\> Get-Date
# You will see output similar to the following:
Friday, July 27, 2018 7:08:48 AM
PS Azure:\> Get-AzVM -Status
# You will see output similar to the following:
ResourceGroupName       Name       Location                VmSize   OsType     ProvisioningState  PowerState
-----------------       ----       --------                ------   ------     -----------------  ----------
MyResourceGroup2        Demo        westus         Standard_DS1_v2  Windows    Succeeded           running
MyResourceGroup         MyVM1       eastus            Standard_DS1  Windows    Succeeded           running
MyResourceGroup         MyVM2       eastus   Standard_DS2_v2_Promo  Windows    Succeeded           deallocated

仮想マシンを操作する

VirtualMachines ディレクトリを使うと、現在のサブスクリプションの下にあるすべての仮想マシンを確認できます。

PS Azure:\MySubscriptionName\VirtualMachines> dir
# You will see output similar to the following:
    Directory: Azure:\MySubscriptionName\VirtualMachines


Name       ResourceGroupName  Location  VmSize          OsType              NIC ProvisioningState  PowerState
----       -----------------  --------  ------          ------              --- -----------------  ----------
TestVm1    MyResourceGroup1   westus    Standard_DS2_v2 Windows       my2008r213         Succeeded     stopped
TestVm2    MyResourceGroup1   westus    Standard_DS1_v2 Windows          jpstest         Succeeded deallocated
TestVm10   MyResourceGroup2   eastus    Standard_DS1_v2 Windows           mytest         Succeeded     running

リモート VM 間で PowerShell スクリプトを呼び出す

警告

Azure VM のリモート管理のトラブルシューティングに関するページを参照してください。

MyVM1 という VM があるとすると、Invoke-AzVMCommand を使ってリモート マシンの PowerShell スクリプト ブロックを呼び出すことができます。

Enable-AzVMPSRemoting -Name MyVM1 -ResourceGroupname MyResourceGroup
Invoke-AzVMCommand -Name MyVM1 -ResourceGroupName MyResourceGroup -Scriptblock {Get-ComputerInfo} -Credential (Get-Credential)

また、最初に VirtualMachines ディレクトリに移動して、次のように Invoke-AzVMCommand を実行することもできます。

PS Azure:\> cd MySubscriptionName\ResourceGroups\MyResourceGroup\Microsoft.Compute\virtualMachines
PS Azure:\MySubscriptionName\ResourceGroups\MyResourceGroup\Microsoft.Compute\virtualMachines> Get-Item MyVM1 | Invoke-AzVMCommand -Scriptblock {Get-ComputerInfo} -Credential (Get-Credential)
# You will see output similar to the following:

PSComputerName                                          : 65.52.28.207
RunspaceId                                              : 2c2b60da-f9b9-4f42-a282-93316cb06fe1
WindowsBuildLabEx                                       : 14393.1066.amd64fre.rs1_release_sec.170327-1835
WindowsCurrentVersion                                   : 6.3
WindowsEditionId                                        : ServerDatacenter
WindowsInstallationType                                 : Server
WindowsInstallDateFromRegistry                          : 5/18/2017 11:26:08 PM
WindowsProductId                                        : 00376-40000-00000-AA947
WindowsProductName                                      : Windows Server 2016 Datacenter
WindowsRegisteredOrganization                           :
...

リモート VM に対話形式でサインインする

Enter-AzVM を使うと、Azure で実行されている VM に対話形式でログインできます。

Enter-AzVM -Name MyVM1 -ResourceGroupName MyResourceGroup -Credential (Get-Credential)

VirtualMachines最初にディレクトリに移動して、次のように実行するEnter-AzVMこともでき ます:

Get-Item MyVM1 | Enter-AzVM -Credential (Get-Credential)

WebApps を検出する

WebApps ディレクトリに入ることで、Web アプリ リソース間を簡単に移動することができます。

dir .\WebApps\
# You will see output similar to the following:
    Directory: Azure:\MySubscriptionName\WebApps

Name            State    ResourceGroup      EnabledHostNames                  Location
----            -----    -------------      ----------------                  --------
mywebapp1       Stopped  MyResourceGroup1   {mywebapp1.azurewebsites.net...   West US
mywebapp2       Running  MyResourceGroup2   {mywebapp2.azurewebsites.net...   West Europe
mywebapp3       Running  MyResourceGroup3   {mywebapp3.azurewebsites.net...   South Central US
# You can use Azure cmdlets to Start/Stop your web apps
PS Azure:\MySubscriptionName\WebApps> Start-AzWebApp -Name mywebapp1 -ResourceGroupName MyResourceGroup1
# You will see output similar to the following:
Name           State    ResourceGroup        EnabledHostNames                   Location
----           -----    -------------        ----------------                   --------
mywebapp1      Running  MyResourceGroup1     {mywebapp1.azurewebsites.net ...   West US
# Refresh the current state with -Force
PS Azure:\MySubscriptionName\WebApps> dir -Force
# You will see output similar to the following:
    Directory: Azure:\MySubscriptionName\WebApps

Name            State    ResourceGroup      EnabledHostNames                  Location
----            -----    -------------      ----------------                  --------
mywebapp1       Running  MyResourceGroup1   {mywebapp1.azurewebsites.net...   West US
mywebapp2       Running  MyResourceGroup2   {mywebapp2.azurewebsites.net...   West Europe
mywebapp3       Running  MyResourceGroup3   {mywebapp3.azurewebsites.net...   South Central US

SSH

SSH を使ってサーバーまたは VM に対する認証を行うには、Cloud Shell で公開/秘密キー ペアを生成して、リモート マシン上の authorized_keys (/home/user/.ssh/authorized_keys など) に公開キーを発行します。

Note

ssh-keygen を使って SSH の公開/秘密キーを作成し、Cloud Shell でそれらを $env:USERPROFILE\.ssh に発行できます。

SSH の使用

こちらの説明に従い、Azure PowerShell コマンドレットを使って新しい VM 構成を作成します。 New-AzVM を呼び出してデプロイを始める前に、SSH 公開キーを VM の構成に追加します。 新しく作成される VM には ~\.ssh\authorized_keys にある公開キーが含まれ、それにより VM への資格情報不要の SSH セッションが有効になります。

# Create VM config object - $vmConfig using instructions on linked page above

# Generate SSH keys in Cloud Shell
ssh-keygen -t rsa -b 2048 -f $HOME\.ssh\id_rsa

# Ensure VM config is updated with SSH keys
$sshPublicKey = Get-Content "$HOME\.ssh\id_rsa.pub"
Add-AzVMSshPublicKey -VM $vmConfig -KeyData $sshPublicKey -Path "/home/azureuser/.ssh/authorized_keys"

# Create a virtual machine
New-AzVM -ResourceGroupName <yourResourceGroup> -Location <vmLocation> -VM $vmConfig

# SSH to the VM
ssh azureuser@MyVM.Domain.Com

使用可能なコマンドを一覧表示する

Azure ドライブで、「Get-AzCommand」と入力してコンテキスト固有の Azure コマンドを取得します。

または、Get-Command *az* -Module Az.* を使うと、使用できる Azure コマンドをいつでも検索できます。

カスタム モジュールをインストールする

Install-Module を実行して、PowerShell ギャラリーからモジュールをインストールできます。

Get-Help

Azure Cloud Shell の PowerShell についての情報を取得するには、「Get-Help」と入力します。

Get-Help

特定のコマンドの場合は、Get-Help の後にコマンドレットを指定します。

Get-Help Get-AzVM

Azure Files を使ってデータを保存する

たとえば helloworld.ps1 といったスクリプトを作成して clouddrive に保存し、それを異なるシェル セッションで使うことができます。

cd $HOME\clouddrive
# Create a new file in clouddrive directory
New-Item helloworld.ps1
# Open the new file for editing
code .\helloworld.ps1
# Add the content, such as 'Hello World!'
.\helloworld.ps1
Hello World!

Cloud Shell で PowerShell を次に使用するときは、helloworld.ps1 ファイルが Azure Files 共有をマウントした $HOME\clouddrive ディレクトリにあります。

カスタム プロファイルを使う

PowerShell プロファイル (profile.ps1 または Microsoft.PowerShell_profile.ps1) を作成することで、PowerShell 環境をカスタマイズできます。 それを $profile.CurrentUserAllHosts (または $profile.CurrentUserCurrentHost) に保存して、Cloud Shell セッションのすべての PowerShell で読み込めるようにします。

プロファイルの作成方法については、「プロファイルについて」を参照してください。

Git を使う

Cloud Shell で Git リポジトリを複製するには、個人用アクセス トークンを作成し、それをユーザー名として使用する必要があります。 トークンを作成した後は、次のようにしてリポジトリを複製します。

git clone https://<your-access-token>@github.com/username/repo.git

シェルを終了します。

exit」と入力してセッションを終了します。