Azure PowerShell チートシート


Azure VM を PowerShell で作るにあたって、元になるサンプルがまだまだ少ない (特に ARM) ので適当にまとめてみようかと思います。
それはそうと、Azure で VM を使うなら最低限可用性セットは組みましょうね。まさかシングル インスタンスで本番環境作ってる人なんていないと思いますが。

1. ASM と ARM

Azure を使い込んでいる人なら当然知っているとは思うのですが、2016/02 現在、Azure の管理機構 (API) は ASM と ARM の二つ存在します。

ASM: Azure Service Management (サービス管理 API)
ARM: Azure Resource Manager (リソース マネージャー API)

ASM はクラシックポータルで主に使われていた API、ARM は新ポータルとともに導入された全く新しい API です。

新ポータルでは、[仮想マシン (クラシック)] と [仮想マシン] といった表記や、仮想マシン作成時に [リソース マネージャー] と [クラシック] の二種類の方式がありますが、クラシックが ASM ベースの仮想マシン、もう一方が ARM を使用した仮想マシンです。V1 とか V2 なんて呼び方をする人もいますね。仕組みを知っていれば大したことはないのですが、変更が大きすぎたり、それぞれ制約が色々とあって、中々難しい…

2. Azure PowerShell を使ってみよう

項目数が増えたので、適当に整理しました。

Azure PowerShell 一般
Storage 系
Network 系
Compute 系

2-1. Azure PowerShell 一般

ログイン

Add-AzureAccount
Login-AzureRmAccount #Add-AzureRmAccount でも同じ

ログインの自動化 (脆弱なので基本的には非推奨。Azure Automation を使いましょう)

Get-AzurePublishSettingsFile #ブラウザが開くので、publishsettings ファイルを保存
Import-AzurePublishSettingsFile -PublishSettingsFile "<保存したファイルのフルパス>"
Save-AzureRmProfile -Path "<JSON ファイルの保存先>"
Select-AzureRmProfile -Path "<JSON ファイルのフルパス>"

※ 認証情報をローカル保存するのは危険すぎるので、使うにしても検証環境にとどめるべき。
あくまでもトークンのキャッシュを保存しているだけなので、期限切れになる気がします。

サブスクリプション一覧の取得、サブスクリプションの指定


Get-AzureSubscription Select-AzureSubscription –SubscriptionId "<サブスクリプション ID>"
Set-Subscription –SubscriptionId "<サブスクリプション ID>" –CurrentStorageAccountName "<ストレージ アカウント名>"

 

Get-AzureRmSubscription Select-AzureRmSubscription –SubscriptionId "<サブスクリプション ID>"

リージョンの取得

余談ですが、日本リージョンは時期によってリソースがひっ迫していたりする場合もあるので、個人的には東・東南アジアがおすすめ。
(過去に日本リージョンが一部制限されたこともあったし、順次増強してるにせよ増強には時間もかかるし、日本は地価高そうだし…)

Get-AzureLocation | ft DisplayName
出力例: サブスクリプションによって利用可能な地域が異なる場合があります
East US
West US
South Central US
Central US
East US 2
North Europe
West Europe
Southeast Asia
East Asia
Japan West
Japan East

 

((Get-AzureRmResourceProvider -ProviderNamespace Microsoft.Compute).ResourceTypes | Where-Object ResourceTypeName -eq virtualMachines).Locations
出力例: サブスクリプションによって利用可能な地域が異なる場合があります
East US
East US 2
West US
Central US
South Central US
North Europe
West Europe
East Asia
Southeast Asia
Japan East
Japan West
North Central US
Australia East
Australia Southeast
Brazil South

特定リージョンで作成可能な VM サイズの取得

(Get-AzureLocation | Where-Object {$_.DisplayName -eq "East Asia"}). VirtualMachineRoleSizes
Get-AzureRmVMSize -Location "East Asia" | Select-Object Name | Select-Object Name

リソースグループの作成・取得 (ARM のみ)

New-AzureRmResourceGroup –Name "<リソース グループ名>" -Location "East Asia"
Get-AzureRmResourceGroup –Name "<リソース グループ名>"

2-2. Storage 系

ストレージ アカウントの作成・取得・削除

New-AzureStorageAccount -StorageAccountName "<ストレージ アカウント名>" -Location "East Asia"
<# –Type でレプリケーションの種類を指定可
-- Standard_LRS
-- Standard_ZRS
-- Standard_GRS
-- Standard_RAGRS
-- Premium_LRS#>

Get-AzureStorageAccount -StorageAccountName "<ストレージ アカウント名>"
Remove-AzureStorageAccount -StorageAccountName "<ストレージ アカウント名>"

 

New-AzureRmStorageAccount –StorageAccountName "<ストレージ アカウント名>" -Location "East Asia" -Type Standard_GRS –ResourceGroupName "<リソース グループ名>"
<# ARM は –Type オプション必須
-- Standard_LRS
-- Standard_ZRS
-- Standard_GRS
-- Standard_RAGRS
-- Premium_LRS#>

Get-AzureRmStorageAccount –Name "<ストレージ アカウント名>" #cmdlet の挙動がちょっと怪しい
Remove-AzureRmStorageAccount –Name "<ストレージ アカウント名>" –ResourceGroupName "<リソース グループ名>"

ストレージのログ有効化


$Ctx = New-AzureStorageContext "<ストレージ アカウント名>" -StorageAccountKey "<アクセス キー>"
Set-AzureStorageServiceLoggingProperty -ServiceType Blob -LoggingOperations read,write,delete -RetentionDays 5 -Context $Ctx
Set-AzureStorageServiceLoggingProperty -ServiceType Table -LoggingOperations read,write,delete -RetentionDays 5 -Context $Ctx
Set-AzureStorageServiceLoggingProperty -ServiceType Queue -LoggingOperations read,write,delete -RetentionDays 5 -Context $Ctx

 

#cmdlet が見当たらない

2-3. Network 系

仮想ネットワーク (VNET)、サブネットの作成・取得・削除

Set-AzureVNetConfig -ConfigurationPath "<netcfg ファイルのパス>" #ASM では VNET を直接作成出来ない
Get-AzureVNetConfig -ExportToFile "c:\temp\MyAzNets.netcfg" 
Get-AzureVNetSite -VNetName "<VNET 名>"
Remove-AzureVNetConfig #試してないですが、設定を全部消しそうなので要注意
New-AzureRmVirtualNetwork -ResourceGroupName "<リソース グループ名>" -Location "East Asia" -Name "<VNET 名>" -AddressPrefix "192.168.0.0/16"
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName "<リソース グループ名>" -Name "<VNET 名>"
Remove-AzureRmVirtualNetwork -ResourceGroupName "<リソース グループ名>" -Name "<VNET 名>"

Add-AzureRmVirtualNetworkSubnetConfig -Name "<サブネット名>" -VirtualNetwork $Vnet -AddressPrefix "192.168.1.0/24"
Get-AzureRmVirtualNetworkSubnetConfig -Name "<サブネット名>" -VirtualNetwork $Vnet
Remove-AzureRmVirtualNetworkSubnetConfig -Name "<サブネット名>" -VirtualNetwork $Vnet

エンドポイント ACL の作成・取得・削除 (ASM のみ)

# !!! NSG との併用は NG !!!

# 空の ACL オブジェクトを作成して、ルールを追加
$Acl = New-AzureAclConfig
Set-AzureAclConfig -AddRule -ACL $Acl -Order "<優先度>" -Action <Permit/Deny> -RemoteSubnet "<アドレス レンジ>" -Description "<説明>"

# 新規のエンドポイントを作成する場合
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Add-AzureEndpoint -Name "<エンドポイント名>" -Protocol tcp -Localport "<ローカル ポート>" -PublicPort "<パブリック ポート>" -ACL $Acl | Update-AzureVM
# 既存のエンドポイントを上書きする場合
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Set-AzureEndpoint -Name "<エンドポイント名>" -Protocol tcp -Localport "<ローカル ポート>" -PublicPort "<パブリック ポート>" -ACL $Acl | Update-AzureVM

# エンドポイントを取得して、ACL を参照
$Endpoint = Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Get-AzureEndpoint
$Endpoint[0].ACL

# エンドポイントごと削除
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Remove-AzureEndpoint -Name "<エンドポイント名>"

ネットワーク セキュリティ グループ (NSG) の作成・取得・削除

# NSG を作成
New-AzureNetworkSecurityGroup -Name "<NSG 名>" -Location "<リージョン>" -Label "<ラベル>"

# NSG にルールを追加
Get-AzureNetworkSecurityGroup -Name "<NSG 名>" | Set-AzureNetworkSecurityRule -Name "<ルール名>" -Action <Allow/Deny> -Protocol <*/TCP/UDP> -Type Inbound -Priority "<優先度>" -SourceAddressPrefix "<接続元のアドレス レンジ>" -SourcePortRange "<接続元ポート>" -DestinationAddressPrefix "<接続先のアドレス レンジ>" -DestinationPortRange "<接続先ポート>"

# NSG を VM に紐づけ
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Set-AzureNetworkSecurityGroupAssociation -Name "<NSG 名>"

# NSG を Subnet に紐づけ
Set-AzureNetworkSecurityGroupAssociation -Name "<仮想マシン名>" -VirtualNetworkName "<仮想ネットワーク名>" -SubnetName "<サブネット名>"

# NSG を取得
Get-AzureNetworkSecurityGroup -Name "<NSG 名>" -Detailed

# VM から NSG の紐づけを削除
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Remove-AzureNetworkSecurityGroupAssociation -Name "<NSG 名>"

# Subnet から NSG の紐づけを削除
Remove-AzureNetworkSecurityGroupAssociation -Name "shuda0903vnet" -VirtualNetworkName "<仮想ネットワーク名>" -SubnetName "<サブネット名>"

# NSG を削除
Remove-AzureNetworkSecurityGroup -Name "<NSG 名>"
# NSG を作成
$Nsg = New-AzureRmNetworkSecurityGroup -Name "<NSG 名>" -ResourceGroupName "<リソース グループ名>" -Location "<リージョン>"

# NSG にルールを追加
$Nsg = Add-AzureRmNetworkSecurityRuleConfig  -Name "<ルール名>" -NetworkSecurityGroup $nsg -Description "<説明>" -Protocol <*/Tcp/Udp> -SourcePortRange "<接続元ポート>" -DestinationPortRange "<接続先ポート>" -SourceAddressPrefix "<接続元のアドレス レンジ>" -DestinationAddressPrefix "<接続先のアドレス レンジ>" -Access <Allow/Deny> -Priority "<優先度>" -Direction <Inbound/Outbound>

# NSG を NIC に紐づけ
$Nic = Get-AzureRmNetworkInterface -Name "<NIC 名>" -ResourceGroupName "<リソース グループ名>"
$Nic.NetworkSecurityGroup = $Nsg
Set-AzureRmNetworkInterface -NetworkInterface $Nic

# NSG を Subnet に紐づけ
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName "<リソース グループ名>" -Name "<仮想ネットワーク名>"
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $Vnet -Name "<サブネット名>" -AddressPrefix "<アドレス レンジ>" -NetworkSecurityGroup $Nsg
Set-AzureRmVirtualNetwork -VirtualNetwork $Vnet

# 以下追記予定 

# NSG を取得
# NIC から NSG の紐づけを削除
# Subnet から NSG の紐づけを削除
# NSG を削除

VPN でオンプレ側のアドレス レンジを追加

# PowerShell ではなく、XML を書き換えてインポートが必要
# 既存の "接続" を削除します
Remove-AzureRmVirtualNetworkGatewayConnection -Name "<接続名>" -ResourceGroupName "<リソース グループ名>"

# 既存の設定を取得します
$LocalGW = Get-AzureRmLocalNetworkGateway -Name "<ローカル ネットワーク ゲートウェイ名>" -ResourceGroupName "<リソース グループ名>"

# アドレス レンジを追加します
$AddressPrefix = $LocalGW.LocalNetworkAddressSpace.AddressPrefixes
$AddressPrefix += "192.168.0.0/24"
$AddressPrefix += "192.168.1.0/24"
$AddressPrefix += "192.168.2.0/24"
$AddressPrefix += "192.168.3.0/24"

# 設定を反映します
Set-AzureRmLocalNetworkGateway -LocalNetworkGateway $LocalGW -AddressPrefix $AddressPrefix

# "接続" を再作成します
$GW = Get-AzureRmVirtualNetworkGateway -Name "<仮想ネットワーク ゲートウェイ名>" -ResourceGroupName "<リソース グループ名>"
New-AzureRmVirtualNetworkGatewayConnection -Name "<接続名>" -ResourceGroupName "<リソース グループ名>" -Location "<リージョン名>" -VirtualNetworkGateway1 $GW -LocalNetworkGateway2 $LocalGW -ConnectionType IPsec -RoutingWeight 10 -SharedKey "<事前共有キー>"

仮想ネットワーク ゲートウェイ (VPN Gateway) のサイズ (SKU) 変更

# あとで
$gw = Get-AzureRmVirtualNetworkGateway -Name "<仮想ネットワーク ゲートウェイ名>" -ResourceGroupName "<リソース グループ名>"
Resize-AzureRmVirtualNetworkGateway -VirtualNetworkGateway $gw -GatewaySku <Basic/Standard/HighPerformance>
# Set-AzureRmVirtualNetworkGateway -VirtualNetworkGateway $gw -GatewaySku <Basic/Standard/HighPerformance> でも同じ

VNet Peering の作成

# 接続する VNet を取得
$vnet1 = Get-AzureRmVirtualNetwork -ResourceGroupName "<リソース グループ名>" -Name "<VNet 名 1>"
$vnet2 = Get-AzureRmVirtualNetwork -ResourceGroupName "<リソース グループ名>" -Name "<VNet 名 2>"

# 双方向で接続
Add-AzureRmVirtualNetworkPeering -name "<VNet Peering 名 1>" -VirtualNetwork "<リソース グループ名>" -RemoteVirtualNetworkId $vnet2.id 
Add-AzureRmVirtualNetworkPeering -name "<VNet Peering 名 2>" -VirtualNetwork "<リソース グループ名>" -RemoteVirtualNetworkId $vnet1.id 

# VNet Peering の状態を取得
Get-AzureRmVirtualNetworkPeering -VirtualNetworkName "<VNet 名 1>" -ResourceGroupName "<リソース グループ名>" -Name "<VNet Peering 名 1>"
Get-AzureRmVirtualNetworkPeering -VirtualNetworkName "<VNet 名 2>" -ResourceGroupName "<リソース グループ名>" -Name "<VNet Peering 名 2>"

# VNet Peering を削除
Remove-AzureRmVirtualNetworkPeering -ResourceGroupName "<リソース グループ名>" -VirtualNetworkName "<VNet 名 1>" -Name "<VNet Peering 名 1>"
Remove-AzureRmVirtualNetworkPeering -ResourceGroupName "<リソース グループ名>" -VirtualNetworkName "<VNet 名 2>" -Name "<VNet Peering 名 2>"

Public IP の正引き・逆引き設定

# クラウド サービスに対して逆引きを設定
Set-AzureService -ServiceName "<クラウド サービス名>" -ReverseDnsFqdn "<クラウド サービス名>.cloudapp.net." #末尾に . (ドット) が必要
# 既存の設定を取得
$PublicIP = Get-AzureRmPublicIpAddress -Name "<Public IP 名>" -ResourceGroupName "<リソース グループ名>"

# 正引き名を追加
$PublicIP.DnsSettings += @{DomainNameLabel = "<DNS 名>"}

# 設定を反映
Set-AzureRmPublicIpAddress -PublicIpAddress $PublicIP

# 実行結果抜粋
# DnsSettings              : {
#                             "DomainNameLabel": "shuda1219",
#                             "Fqdn": "xxx.japaneast.cloudapp.azure.com", <== これをコピー
#                             "ReverseFqdn": 
#                           }

# 逆引き名を追加
$PublicIP.DnsSettings.ReverseFqdn = "xxx.japaneast.cloudapp.azure.com"

# 設定を反映
Set-AzureRmPublicIpAddress -PublicIpAddress $PublicIP

# 実行結果抜粋
# DnsSettings              : {
#                             "DomainNameLabel": "shuda1219",
#                             "Fqdn": "xxx.japaneast.cloudapp.azure.com",
#                             "ReverseFqdn": "xxx.japaneast.cloudapp.azure.com"
#                           }

複数のパブリック フロントエンド IP を有する Load Balancer の作成

# あとで書き足す予定
# 定義
$SubscriptionId = "<サブスクリプション ID>"
$RgName = "<リソース グループ名>"
$Location = "Japan East"

# ログイン処理
Login-AzureRmAccount
Get-AzureRmSubscription
Select-AzureRmSubscription -SubscriptionId $SubscriptionId
New-AzureRmResourceGroup -Name $RgName -location $Location

# 仮想ネットワークの作成
$backendSubnet = New-AzureRmVirtualNetworkSubnetConfig -Name LB-Subnet-BE -AddressPrefix 10.0.2.0/24
New-AzureRmvirtualNetwork -Name NRPVNet -ResourceGroupName $RgName -Location $Location -AddressPrefix 10.0.0.0/16 -Subnet $backendSubnet

# フロントエンド IP の作成
$publicIP1 = New-AzureRmPublicIpAddress -Name PublicIp1 -ResourceGroupName $RgName -Location $Location –AllocationMethod Static -DomainNameLabel loadbalancernrp1
$publicIP2 = New-AzureRmPublicIpAddress -Name PublicIp2 -ResourceGroupName $RgName -Location $Location –AllocationMethod Static -DomainNameLabel loadbalancernrp2

# フロントエンド IP を定義
$frontendIP1 = New-AzureRmLoadBalancerFrontendIpConfig -Name LB-Frontend1 -PublicIpAddress $publicIP1
$frontendIP2 = New-AzureRmLoadBalancerFrontendIpConfig -Name LB-Frontend2 -PublicIpAddress $publicIP2

# バックエンド アドレス プールを作成
$beaddresspool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name LB-backend

# プローブを定義
$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name HealthProbe -RequestPath '/' -Protocol http -Port 80 -IntervalInSeconds 15 -ProbeCount 2

# 負荷分散ルールを定義
$lbrule1 = New-AzureRmLoadBalancerRuleConfig -Name HTTP1 -FrontendIpConfiguration $frontendIP1 -BackendAddressPool  $beAddressPool -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 80
$lbrule2 = New-AzureRmLoadBalancerRuleConfig -Name HTTP2 -FrontendIpConfiguration $frontendIP2 -BackendAddressPool  $beAddressPool -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 80

# LB を作成
$LB = New-AzureRmLoadBalancer -ResourceGroupName $RgName -Name NRP-LB -Location $Location -FrontendIpConfiguration $frontendIP1,$frontendIP2 -LoadBalancingRule $lbrule1,$lbrule2 -BackendAddressPool $beAddressPool -Probe $healthProbe

Internal Load Balancer の構成変更

# 気が向いたら後で書く
# 各種変数を設定します
$ResourceGroupName = "<リソース グループ名>"
$IlbName = "<ロードバランサー名>"
$VnetName = "<仮想ネットワーク名>"
$SubnetName = "<サブネット名>"
$OldFrontendIpName = "<旧フロントエンド IP 名>"
$NewFrontendIpName = "<新フロントエンド IP 名>"
$NewFrontendIpAddress = "<新フロントエンド IP アドレス>"
$OldBackendAddressPoolName = "<旧バックエンド アドレス プール名>"
$NewBackendAddressPoolName = "<新バックエンド アドレス プール名>"
$LoadBalancingRuleName = "<負荷分散規則名>"
$NicNames = @("NIC 名 1","NIC 名 2")
$NicIpConfigName = "NIC の IpCOnfig 名"

# 既存のロードバランサーの構成を取得します
$Ilb = Get-AzureRmLoadBalancer -Name $IlbName -ResourceGroupName $ResourceGroupName

# フロントエンド IP を配置させる VNET の情報を取得します
$Vnet= Get-AzureRmVirtualNetwork -Name $VnetName -ResourceGroupName $ResourceGroupName

# フロントエンド IP を追加します
$Ilb = Add-AzureRmLoadBalancerFrontendIpConfig -Name $NewFrontendIpName -LoadBalancer $Ilb -PrivateIpAddress $NewFrontendIpAddress -SubnetId ($Vnet.subnets | where Name -eq $SubnetName).Id

# バックエンド アドレス プールを追加します
$Ilb = Add-AzureRmLoadBalancerBackendAddressPoolConfig -Name $NewBackendAddressPoolName -LoadBalancer $Ilb

# 設定を反映します
$Ilb = Set-AzureRmLoadBalancer -LoadBalancer $Ilb

# NIC の数だけループさせます
foreach($NicName in $NicNames){
    # バックエンド アドレス プールの構成を取得します
    $Backend = Get-AzureRmLoadBalancerBackendAddressPoolConfig -name $NewBackendAddressPoolName -LoadBalancer $Ilb

    # バックエンド アドレス プールに紐付ける既存の NIC の構成を取得します
    $Nic = Get-AzureRmNetworkInterface –name $NicName -resourcegroupname $ResourceGroupName

    # バックエンド アドレス プールに既存の VM の NIC を紐付けます
    ($Nic.IpConfigurations | where Name -eq $NicIpConfigName).LoadBalancerBackendAddressPools = $Backend

    # NIC の設定を反映します
    $Nic = Set-AzureRmNetworkInterface -NetworkInterface $Nic
}

# 既存の負荷分散規則に紐づくフロントエンド IPを変更します
($Ilb.LoadBalancingRules | where Name -eq $LoadBalancingRuleName).FrontendIPConfiguration.Id = ($Ilb.FrontendIpConfigurations | where Name -eq $NewFrontendIpName).Id

# 既存の負荷分散規則に紐づくバックエンド アドレス プールを変更します
($Ilb.LoadBalancingRules | where Name -eq $LoadBalancingRuleName).BackendAddressPool.Id = ($Ilb.BackendAddressPools | where Name -eq $NewBackendAddressPoolName).Id

# 不要になったフロントエンド IP を削除します
$Ilb = Remove-AzureRmLoadBalancerFrontendIpConfig -Name $OldFrontendIpName -LoadBalancer $ilb

# 不要になったバックエンド アドレス プールを削除します
$Ilb = Remove-AzureRmLoadBalancerBackendAddressPoolConfig -Name $OldBackendAddressPoolName -LoadBalancer $ilb

# 設定を反映します
$Ilb = Set-AzureRmLoadBalancer -LoadBalancer $Ilb

サイト間 VPN (静的 / Policy-Based) の構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName = "<仮想ネットワーク名>"
$VNetAddressPrefix = "10.0.0.0/16"
$GatewaySubnetAddressPrefix = "10.0.0.0/28"
$Subnet1AddressPrefix = "10.0.1.0/28"
$GatewayName = "<ゲートウェイ名>"
$GatewayPublicIpName = "<ゲートウェイのパブリック IP 名>"
$LocalNetworkGatewayName = "<ローカル ネットワーク ゲートウェイ名>"
$LocalNetworkGatewayIp = "<オンプレミスの VPN 機器が持つグローバル IP>"
$OnpremiseAddressPrefix = "<ローカルのアドレス レンジ>"
$ConnectionName = "<接続名>"
$PreSharedKey = "<事前共有キー>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix
New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $Subnet1, $Subnet2

# ローカル ネットワーク ゲートウェイを作成
New-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName -Location $Location -GatewayIpAddress $LocalNetworkGatewayIp -AddressPrefix $OnpremiseAddressPrefix

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet
$GatewayIpConfig = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $Subnet.Id -PublicIpAddressId $GatewayPublicIp.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig -GatewayType Vpn -VpnType PolicyBased -GatewaySku Basic

# VPN Gateway のパブリック IP を取得 (こちらをオンプレミスのルーターで設定)
Get-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName

# オンプレミスとの接続オブジェクトを作成
$VNetGateway1 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName
$LocalNetworkGateway2 = Get-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway1 -LocalNetworkGateway2 $LocalNetworkGateway2 -ConnectionType IPsec -RoutingWeight 10 -SharedKey $PreSharedKey

サイト間 VPN (動的 / Route-Based) の構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName = "<仮想ネットワーク名>"
$VNetAddressPrefix = "10.0.0.0/16"
$GatewaySubnetAddressPrefix = "10.0.0.0/28"
$Subnet1AddressPrefix = "10.0.1.0/28"
$GatewayName = "<ゲートウェイ名>"
$GatewayPublicIpName = "<ゲートウェイのパブリック IP 名>"
$LocalNetworkGatewayName = "<ローカル ネットワーク ゲートウェイ名>"
$LocalNetworkGatewayIp = "<オンプレミスの VPN 機器が持つグローバル IP>"
$OnpremiseAddressPrefix = "<ローカルのアドレス レンジ>"
$ConnectionName = "<接続名>"
$PreSharedKey = "<事前共有キー>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix
New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $Subnet1, $Subnet2

# ローカル ネットワーク ゲートウェイを作成
New-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName -Location $Location -GatewayIpAddress $LocalNetworkGatewayIp -AddressPrefix $OnpremiseAddressPrefix

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet
$GatewayIpConfig = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $Subnet.Id -PublicIpAddressId $GatewayPublicIp.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig -GatewayType Vpn -VpnType RouteBased -GatewaySku Basic

# VPN Gateway のパブリック IP を取得 (こちらをオンプレミスのルーターで設定)
Get-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName

# オンプレミスとの接続オブジェクトを作成
$VNetGateway1 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName
$LocalNetworkGateway2 = Get-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway1 -LocalNetworkGateway2 $LocalNetworkGateway2 -ConnectionType IPsec -RoutingWeight 10 -SharedKey $PreSharedKey

BGP を使用したサイト間 VPN (動的 / Route-Based) の構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName = "<仮想ネットワーク名>"
$VNetAddressPrefix = "10.0.0.0/16"
$GatewaySubnetAddressPrefix = "10.0.0.0/28"
$Subnet1AddressPrefix = "10.0.1.0/28"
$GatewayName = "<ゲートウェイ名>"
$GatewayPublicIpName = "<ゲートウェイのパブリック IP 名>"
$ASNumber = "<AS 番号>"
$LocalNetworkGatewayName = "<ローカル ネットワーク ゲートウェイ名>"
$LocalNetworkGatewayIp = "<オンプレミスの VPN 機器が持つグローバル IP>"
$OnpremiseAddressPrefix = "<ローカルのアドレス レンジ>"
$ConnectionName = "<接続名>"
$PreSharedKey = "<事前共有キー>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix
New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $Subnet1, $Subnet2

# ローカル ネットワーク ゲートウェイを作成
New-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName -Location $Location -GatewayIpAddress $LocalNetworkGatewayIp -AddressPrefix $OnpremiseAddressPrefix

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet
$GatewayIpConfig = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $Subnet.Id -PublicIpAddressId $GatewayPublicIp.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig -GatewayType Vpn -VpnType RouteBased -GatewaySku Standard -Asn $ASNumber

# VPN Gateway のパブリック IP を取得 (こちらをオンプレミスのルーターで設定)
Get-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName

# オンプレミスとの接続オブジェクトを作成
$VNetGateway1 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName
$LocalNetworkGateway2 = Get-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway1 -LocalNetworkGateway2 $LocalNetworkGateway2 -ConnectionType IPsec -RoutingWeight 10 -SharedKey $PreSharedKey

Active-Active 構成のサイト間 VPN (動的 / Route-Based) の構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName = "<仮想ネットワーク名>"
$VNetAddressPrefix = "10.0.0.0/16"
$GatewaySubnetAddressPrefix = "10.0.0.0/28"
$Subnet1AddressPrefix = "10.0.1.0/28"
$GatewayName = "<ゲートウェイ名>"
$GatewayPublicIpName1 = "<ゲートウェイのパブリック IP 名 1>"
$GatewayPublicIpName2 = "<ゲートウェイのパブリック IP 名 2>"
$ASNumber = "<AS 番号>"
$LocalNetworkGatewayName = "<ローカル ネットワーク ゲートウェイ名>"
$LocalNetworkGatewayIp = "<オンプレミスの VPN 機器が持つグローバル IP>"
$OnpremiseAddressPrefix = "<ローカルのアドレス レンジ>"
$ConnectionName = "<接続名>"
$PreSharedKey = "<事前共有キー>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix
New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $Subnet1, $Subnet2

# ローカル ネットワーク ゲートウェイを作成
New-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName -Location $Location -GatewayIpAddress $LocalNetworkGatewayIp -AddressPrefix $OnpremiseAddressPrefix

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp1 = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName1 -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic
$GatewayPublicIp2 = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName2 -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet
$GatewayIpConfig1 = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $Subnet.Id -PublicIpAddressId $GatewayPublicIp1.Id 
$GatewayIpConfig2 = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig2 -SubnetId $Subnet.Id -PublicIpAddressId $GatewayPublicIp2.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig1,$GatewayIpConfig2 -GatewayType Vpn -VpnType RouteBased -GatewaySku HighPerformance -Asn $ASNumber -ActiveActive $True

# VPN Gateway のパブリック IP を取得 (こちらをオンプレミスのルーターで設定)
Get-AzureRmPublicIpAddress -Name $GatewayPublicIpName1 -ResourceGroupName $ResourceGroupName
Get-AzureRmPublicIpAddress -Name $GatewayPublicIpName2 -ResourceGroupName $ResourceGroupName

# オンプレミスとの接続オブジェクトを作成
$VNetGateway1 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName
$LocalNetworkGateway2 = Get-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName -ResourceGroupName $ResourceGroupName
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway1 -LocalNetworkGateway2 $LocalNetworkGateway2 -ConnectionType IPsec -RoutingWeight 10 -SharedKey $PreSharedKey

ポイント対サイト (P2S) VPN の構築


$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName = "<仮想ネットワーク名>"
$VNetAddressPrefix = "10.0.0.0/16"
$GatewaySubnetAddressPrefix = "10.0.0.0/28"
$Subnet1AddressPrefix = "10.0.1.0/28"
$GatewayName = "<ゲートウェイ名>"
$GatewayPublicIpName = "<ゲートウェイのパブリック IP 名>"
$ClientAddressPool = "192.168.0.0/24"
$RootCertName = "VpnRootCert.cer"
$RootCertPath = "C:\Users\Administrator\Desktop\VpnRootCert.cer"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix
New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $Subnet1, $Subnet2

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet
$GatewayIpConfig = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $subnet.Id -PublicIpAddressId $GatewayPublicIp.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig -GatewayType Vpn -VpnType RouteBased -GatewaySku Basic

# makecert (要インストール) で証明書を作成
"C:\Program Files (x86)\Windows Kits\10\bin\x64\makecert.exe" -sky exchange -r -n "CN=VpnRootCert" -pe -a sha1 -len 2048 -ss My "VpnRootCert.cer"
"C:\Program Files (x86)\Windows Kits\10\bin\x64\makecert.exe" -n "CN=VpnClientCert" -pe -sky exchange -m 96 -ss My -in "VpnRootCert" -is my -a sha1
 
# 事前にクライアント アドレス プール (クライアント端末に払い出す IP レンジ) を追加
$VNetGateway = Get-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName
Set-AzureRmVirtualNetworkGatewayVpnClientConfig -VirtualNetworkGateway $VNetGateway -VpnClientAddressPool $ClientAddressPool
 
# ルート証明書を追加
$RootCertBase64 = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($RootCertPath))
Add-AzureRmVpnClientRootCertificate -VpnClientRootCertificateName $RootCertName -VirtualNetworkGatewayname $VNetGateway.Name -ResourceGroupName $VNetGateway.ResourceGroupName -PublicCertData $RootCertBase64
 
# VPN クライアントのダウンロード (ダウンロード可能になるまで若干時間がかかる)
$ClientUrl = Get-AzureRmVpnClientPackage -ResourceGroupName $VNetGateway.ResourceGroupName -VirtualNetworkGatewayName $VNetGateway.Name -ProcessorArchitecture Amd64
Invoke-WebRequest $ClientUrl

# 別途、クライアント端末にはクライアント証明書を配布が必要

ExpressRoute 用の Gateway 構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName = "<仮想ネットワーク名>"
$VNetAddressPrefix = "10.0.0.0/16"
$GatewaySubnetAddressPrefix = "10.0.0.0/28"
$Subnet1AddressPrefix = "10.0.1.0/28"
$GatewayName = "<ゲートウェイ名>"
$GatewayPublicIpName = "<ゲートウェイのパブリック IP 名>"
$CircuitName = "<ExpressRoute サーキット名>"
$ConnectionName = "<接続名>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix
New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $Subnet1, $Subnet2

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet
$GatewayIpConfig = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $subnet.Id -PublicIpAddressId $GatewayPublicIp.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig -GatewayType Expressroute -GatewaySku Standard

# ExpressRoute Circuit と仮想ネットワークを接続
$Circuit = Get-AzureRmExpressRouteCircuit -Name $CircuitName -ResourceGroupName $ResourceGroupName
$VNetGateway1 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName -ResourceGroupName $ResourceGroupName
$Connection = New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway1 -PeerId $Circuit.Id -ConnectionType ExpressRoute

Vnet2Vnet の構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName1 = "<仮想ネットワーク名 1>"
$VNetAddressPrefix1 = "10.0.0.0/16"
$GatewaySubnetAddressPrefix1 = "10.0.0.0/28"
$Subnet1AddressPrefix1 = "10.0.1.0/28"
$GatewayName1 = "<ゲートウェイ名 1>"
$GatewayPublicIpName1 = "<ゲートウェイのパブリック IP 名 1>"
$VNetName2 = "<仮想ネットワーク名 2>"
$VNetAddressPrefix2 = "10.1.0.0/16"
$GatewaySubnetAddressPrefix2 = "10.1.0.0/28"
$Subnet1AddressPrefix2 = "10.1.1.0/28"
$GatewayName2 = "<ゲートウェイ名 2>"
$GatewayPublicIpName2 = "<ゲートウェイのパブリック IP 名 2>"
$ConnectionName1 = "<接続名 1>"
$ConnectionName2 = "<接続名 2>"
$PreSharedKey = "<事前共有キー>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix1
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix1
New-AzureRmVirtualNetwork -Name $VNetName1 -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix1 -Subnet $Subnet1, $Subnet2
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix2
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix2
New-AzureRmVirtualNetwork -Name $VNetName2 -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix2 -Subnet $Subnet1, $Subnet2

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp1 = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName1 -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic
$GatewayPublicIp2 = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName2 -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet1 = Get-AzureRmVirtualNetwork -Name $VNetName1 -ResourceGroupName $ResourceGroupName
$Subnet1 = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet1
$GatewayIpConfig1 = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $Subnet1.Id -PublicIpAddressId $GatewayPublicIp1.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName1 -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig1 -GatewayType Vpn -VpnType RouteBased -GatewaySku Basic
$Vnet2 = Get-AzureRmVirtualNetwork -Name $VNetName2 -ResourceGroupName $ResourceGroupName
$Subnet2 = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet2
$GatewayIpConfig2 = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig2 -SubnetId $Subnet2.Id -PublicIpAddressId $GatewayPublicIp2.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName2 -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig2 -GatewayType Vpn -VpnType RouteBased -GatewaySku Basic

# Vnet間接続を作成
$VNetGateway1 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName1 -ResourceGroupName $ResourceGroupName
$VNetGateway2 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName2 -ResourceGroupName $ResourceGroupName
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName1 -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway1 -VirtualNetworkGateway2 $VNetGateway2 -ConnectionType Vnet2Vnet -SharedKey $PreSharedKey
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName2 -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway2 -VirtualNetworkGateway2 $VNetGateway1 -ConnectionType Vnet2Vnet -SharedKey $PreSharedKey

サイト間 VPN を使用した Vnet2Vnet の構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName1 = "<仮想ネットワーク名 1>"
$VNetAddressPrefix1 = "10.0.0.0/16"
$GatewaySubnetAddressPrefix1 = "10.0.0.0/28"
$Subnet1AddressPrefix1 = "10.0.1.0/28"
$GatewayName1 = "<ゲートウェイ名 1>"
$GatewayPublicIpName1 = "<ゲートウェイのパブリック IP 名 1>"
$LocalNetworkGatewayName2 = "<ローカル ネットワーク ゲートウェイ名 1>"
$VNetName2 = "<仮想ネットワーク名 2>"
$VNetAddressPrefix2 = "10.1.0.0/16"
$GatewaySubnetAddressPrefix2 = "10.1.0.0/28"
$Subnet1AddressPrefix2 = "10.1.1.0/28"
$GatewayName2 = "<ゲートウェイ名 2>"
$GatewayPublicIpName2 = "<ゲートウェイのパブリック IP 名 2>"
$LocalNetworkGatewayName2 = "<ローカル ネットワーク ゲートウェイ名 2>"
$ConnectionName1 = "<接続名 1>"
$ConnectionName2 = "<接続名 2>"
$PreSharedKey = "<事前共有キー>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix1
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix1
New-AzureRmVirtualNetwork -Name $VNetName1 -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix1 -Subnet $Subnet1, $Subnet2
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -AddressPrefix $GatewaySubnetAddressPrefix2
$Subnet2 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix2
New-AzureRmVirtualNetwork -Name $VNetName2 -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix2 -Subnet $Subnet1, $Subnet2

# ゲートウェイ用のパブリック IP アドレスを作成
$GatewayPublicIp1 = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName1 -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic
$GatewayPublicIp2 = New-AzureRmPublicIpAddress -Name $GatewayPublicIpName2 -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic

# 作成したリソースを指定して、ゲートウェイを作成
$Vnet1 = Get-AzureRmVirtualNetwork -Name $VNetName1 -ResourceGroupName $ResourceGroupName
$Subnet1 = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet1
$GatewayIpConfig1 = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig1 -SubnetId $Subnet1.Id -PublicIpAddressId $GatewayPublicIp1.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName1 -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig1 -GatewayType Vpn -VpnType RouteBased -GatewaySku Basic
$Vnet2 = Get-AzureRmVirtualNetwork -Name $VNetName2 -ResourceGroupName $ResourceGroupName
$Subnet2 = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $Vnet2
$GatewayIpConfig2 = New-AzureRmVirtualNetworkGatewayIpConfig -Name gwipconfig2 -SubnetId $Subnet2.Id -PublicIpAddressId $GatewayPublicIp2.Id 
New-AzureRmVirtualNetworkGateway -Name $GatewayName2 -ResourceGroupName $ResourceGroupName -Location $Location -IpConfigurations $GatewayIpConfig2 -GatewayType Vpn -VpnType RouteBased -GatewaySku Basic

# VPN Gateway のパブリック IP を取得 (こちらをオンプレミスのルーターで設定)
$LocalNetworkGatewayIp1 = Get-AzureRmPublicIpAddress -Name $GatewayPublicIpName1 -ResourceGroupName $ResourceGroupName
$LocalNetworkGatewayIp2 = Get-AzureRmPublicIpAddress -Name $GatewayPublicIpName2 -ResourceGroupName $ResourceGroupName

# ローカル ネットワーク ゲートウェイを作成
New-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName1 -ResourceGroupName $ResourceGroupName -Location $Location -GatewayIpAddress $LocalNetworkGatewayIp1 -AddressPrefix $VNetAddressPrefix2 
New-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName2 -ResourceGroupName $ResourceGroupName -Location $Location -GatewayIpAddress $LocalNetworkGatewayIp2 -AddressPrefix $VNetAddressPrefix1

# Vnet間接続を作成
$VNetGateway1 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName1 -ResourceGroupName $ResourceGroupName
$VNetGateway2 = Get-AzureRmVirtualNetworkGateway -Name $GatewayName2 -ResourceGroupName $ResourceGroupName
$LocalNetworkGateway1 = Get-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName1 -ResourceGroupName $ResourceGroupName
$LocalNetworkGateway2 = Get-AzureRmLocalNetworkGateway -Name $LocalNetworkGatewayName2 -ResourceGroupName $ResourceGroupName
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName1 -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway1 -LocalNetworkGateway2 $LocalNetworkGateway1 -ConnectionType IPsec -SharedKey $PreSharedKey
New-AzureRmVirtualNetworkGatewayConnection -Name $ConnectionName2 -ResourceGroupName $ResourceGroupName -Location $Location -VirtualNetworkGateway1 $VNetGateway2 -LocalNetworkGateway2 $LocalNetworkGateway2 -ConnectionType IPsec -SharedKey $PreSharedKey

ARM 同士の VNet Peering の構築

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName1 = "<仮想ネットワーク名 1>"
$VNetAddressPrefix1 = "10.0.0.0/16"
$Subnet1AddressPrefix1 = "10.0.0.0/28"
$VNetName2 = "<仮想ネットワーク名 2>"
$VNetAddressPrefix2 = "10.1.0.0/16"
$Subnet1AddressPrefix2 = "10.1.0.0/28"
$PeerName1 = "<ピアリング名 1>"
$PeerName2 = "<ピアリング名 2>"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix1
New-AzureRmVirtualNetwork -Name $VNetName1 -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix1 -Subnet $Subnet1
$Subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix2
New-AzureRmVirtualNetwork -Name $VNetName2 -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix2 -Subnet $Subnet1

# 作成した VNet を取得
$VNet1 = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName1
$VNet2 = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName2

# VNetPeering を作成
Add-AzureRmVirtualNetworkPeering -name $PeerName1 -VirtualNetwork $VNet1 -RemoteVirtualNetworkId $VNet2.id
Add-AzureRmVirtualNetworkPeering -name $PeerName2 -VirtualNetwork $VNet2 -RemoteVirtualNetworkId $VNet1.id

ARM-ASM 間の VNet Peering の構築 (同一サブスクリプションのみ)

$Location = "<リージョン名>"
$ResourceGroupName = "<リソース グループ名>"
$VNetName = "shuda100709a"
$VNetAddressPrefix = "10.0.0.0/16"
$Subnet1AddressPrefix = "10.0.0.0/28"
$ClassicVNetId = "<クラシック環境の VNet リソース Id>"
$PeerName = "shuda100709a2b"

# リソース グループを作成
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location

# 仮想ネットワーク・サブネットを作成
$Subnet = New-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet1' -AddressPrefix $Subnet1AddressPrefix
New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $Subnet

# 作成した VNet を取得
$VNet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName

# VNetPeering を作成
Add-AzureRmVirtualNetworkPeering -name $PeerName -VirtualNetwork $VNet -RemoteVirtualNetworkId $ClassicVNetId

2-4. Compute 系

クラウド サービスの作成・取得・削除 (ASM のみ)


New-AzureService -ServiceName "<クラウド サービス名>" -Location "East Asia"

既存の VHD をイメージとして関連付け・削除 (ASM のみ)

Add-AzureVMImage -ImageName "<イメージ名>" -MediaLocation "<VHD パス>" -OS "<Windows / Linux>"
Remove-AzureVMImage -ImageName "<イメージ名>" # -DeleteVHD オプションを付与すると VHD も削除可能

OS イメージの取得

#ImageFamily 一覧の取得
Get-AzureVMImage | Select-Object ImageFamily -Unique | Sort-Object ImageFamily

#ImageFamily をもとに最新のイメージを指定
$Image = Get-AzureVMImage | Where-Object {$_.ImageFamily –eq "Windows Server 2012 R2 Datacenter"}| Sort-Object PublishedDate -Descending | Select-Object -ExpandProperty ImageName -First 1

########################################

#一覧からイメージを手動選択
$ImageFamily = Get-AzureVMImage | Select-Object ImageFamily -Unique | Sort-Object ImageFamily | Out-GridView -Title "Select OS Family" -PassThru
$Image = Get-AzureVMImage | Where-Object { $_.ImageFamily -eq $ImageFamily.ImageFamily } | Select-Object PublishedDate, OS, ImageFamily, Label, LogicalSizeInGB, ImageName | Sort-Object PublishedDate -Descending | Out-GridView -Title "Select VM Image" -PassThru
#ImagePublisher 一覧の取得
Get-AzureRmVMImagePublisher -Location "East Asia"

#ImageOffer 一覧の取得
Get-AzureRmVMImageOffer -Location "East Asia" -PublisherName MicrosoftWindowsServer

#ImageSku 一覧の取得
Get-AzureRmVMImageSku -Location "East Asia" -PublisherName MicrosoftWindowsServer -Offer WindowsServer

#Image を取得
Get-AzureRmVMImage -Location "East Asia" -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2012-Datacenter

########################################

#VM の構成情報に OS イメージを指定 (詳細は後述)
$VmConfig = Set-AzureRmVMSourceImage -VM $Vm -PublisherName "OpenLogic" -Offer "CentOS" -Skus "6.7" -Version "latest"

イメージから Windows 仮想マシンの作成

#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$StorageAccountName = "<ストレージ アカウント名>"
$ServiceName = "<クラウド サービス名>"
$Location = "<リージョン>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"
$ImageFamily = "Windows Server 2012 R2 Datacenter"

#ログイン、サブスクリプション指定 (事前に設定していれば省略可能)
Add-AzureAccount
Select-AzureSubscription -SubscriptionId $SubscriptionId

#ストレージアカウントの作成、指定 (事前に設定していれば省略可能)
New-AzureStorageAccount -StorageAccountName $StorageAccountName -Location $Location -Type Standard_GRS
Set-AzureSubscription –SubscriptionId $SubscriptionId –CurrentStorageAccountName $StorageAccountName

#ユーザー名・パスワードを設定
$Credential = Get-Credential -Message "Type the name and password of the local administrator account."
 
#仮想マシンの設定を定義
$Image = Get-AzureVMImage | Where-Object {$_.ImageFamily –eq $ImageFamily}| Sort-Object PublishedDate -Descending | Select-Object -ExpandProperty ImageName -First 1
$VmConfig = New-AzureVMConfig -Name $VmName -InstanceSize $VmSize -ImageName $Image
$VmConfig | Add-AzureProvisioningConfig -Windows -AdminUsername $Credential.UserName -Password $Credential.Password
 
#クラウド サービスを作成
New-AzureService -ServiceName $ServiceName -Location $Location
 
#仮想マシンを作成
New-AzureVM –ServiceName $ServiceName -VMs $VmConfig
<# Public IP を付与しないと RDP 出来ないので、要追加 (以降すべて) #>

#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$ResourceGroupName = "<リソースグループ名>"
$StorageAccountName = "<ストレージ アカウント名>"
$Location = "<リージョン>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"
$VnetName = "<仮想ネットワーク名>"
$SubnetName = "<サブネット名>"
$Nic1Name = "<NIC1 の名称>"

#ログイン、サブスクリプション指定 (事前に設定していれば省略可能)
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

#ユーザー名・パスワードを設定
$Credential = Get-Credential

#リソース グループを作成
New-AzureRmResourceGroup –Name $ResourceGroupName -Location $Location

#ストレージ アカウントを作成
New-AzureRmStorageAccount –StorageAccountName $StorageAccountName -Location "East Asia" -Type Standard_GRS –ResourceGroupName $ResourceGroupName
$StorageAccount = Get-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName

#仮想ネットワークを作成
New-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Location "East Asia" -Name $VnetName -AddressPrefix "192.168.0.0/16"
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName
Add-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $Vnet -AddressPrefix "192.168.1.0/24" |  Set-AzureRmVirtualNetwork
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]

#仮想マシンの設定を定義
$VmConfig = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize
$VmConfig = Set-AzureRmVMOperatingSystem -VM $VmConfig -Windows -ComputerName $VmName -Credential $Credential
$VmConfig = Set-AzureRmVMSourceImage -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2012-R2-Datacenter" -VM $VmConfig -Version "latest"
$VhdUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $VmName + "_OSDisk.vhd"
$VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -Name "OSDisk" -VhdUri $VhdUri -CreateOption fromImage

#NIC を作成、追加
$Nic1 = New-AzureRmNetworkInterface -Name $Nic1Name -ResourceGroupName $ResourceGroupName -Location $Location -Subnet $Subnet
$Nic1 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $Nic1Name
$VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -NetworkInterface $Nic1
$VmConfig.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true

#仮想マシンを作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VmConfig -Verbose

[参考 URL] https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-ps-create-preconfigure-windows-vms/

イメージから Linux 仮想マシンの作成

#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$StorageAccountName = "<ストレージ アカウント名>"
$ServiceName = "<クラウド サービス名>"
$Location = "<リージョン>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"
$ImageLabel = "OpenLogic 7.1"
 
#ログイン、サブスクリプション指定 (事前に設定していれば省略可能)
Add-AzureAccount
Select-AzureSubscription -SubscriptionId $SubscriptionId

#ストレージアカウントの作成、指定 (事前に設定していれば省略可能)
New-AzureStorageAccount -StorageAccountName $StorageAccountName -Location $Location -Type Standard_GRS
Set-AzureSubscription –SubscriptionId $SubscriptionId –CurrentStorageAccountName $StorageAccountName

#ユーザー名・パスワードを設定
$Credential = Get-Credential -Message "Type the name and password of the local administrator account."
 
#仮想マシンの設定を定義
$Image = Get-AzureVMImage | Where-Object {$_.Label –eq $ImageLabel}| Sort-Object PublishedDate -Descending | Select-Object -ExpandProperty ImageName -First 1
$VmConfig = New-AzureVMConfig -Name $VmName -InstanceSize $VmSize -ImageName $Image
$VmConfig | Add-AzureProvisioningConfig -Linux -LinuxUser $Credential.UserName -Password $Credential.Password
 
#クラウド サービスを作成
New-AzureService -ServiceName $ServiceName -Location $Location
 
#仮想マシンを作成
New-AzureVM –ServiceName $ServiceName -VMs $VmConfig
#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$ResourceGroupName = "<リソースグループ名>"
$StorageAccountName = "<ストレージ アカウント名>"
$Location = "<リージョン>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"
$VnetName = "<仮想ネットワーク名>"
$SubnetName = "<サブネット名>"
$Nic1Name = "<NIC1 の名称>"

#ログイン、サブスクリプション指定 (事前に設定していれば省略可能)
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

#ユーザー名・パスワードを設定
$Credential = Get-Credential

#リソース グループを作成
New-AzureRmResourceGroup –Name $ResourceGroupName -Location $Location

#ストレージ アカウントを作成
New-AzureRmStorageAccount –StorageAccountName $StorageAccountName -Location "East Asia" -Type Standard_GRS –ResourceGroupName $ResourceGroupName
$StorageAccount = Get-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName

#仮想ネットワークを作成
New-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Location "East Asia" -Name $VnetName -AddressPrefix "192.168.0.0/16"
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName
Add-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $Vnet -AddressPrefix "192.168.1.0/24" |  Set-AzureRmVirtualNetwork
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]

#仮想マシンの設定を定義
$VmConfig = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize
$VmConfig = Set-AzureRmVMOperatingSystem -VM $VmConfig -Linux -ComputerName $VmName -Credential $Credential
$VmConfig = Set-AzureRmVMSourceImage -VM $VmConfig -PublisherName "OpenLogic" -Offer "CentOS" -Skus "7.1" -Version "latest"
$VhdUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $VmName + "_OSDisk.vhd"
$VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -Name "OSDisk" -VhdUri $VhdUri -CreateOption fromImage

#NIC を作成、追加
$Nic1 = New-AzureRmNetworkInterface -Name $Nic1Name -ResourceGroupName $ResourceGroupName -Location $Location -Subnet $Subnet
$Nic1 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $Nic1Name
$VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -NetworkInterface $Nic1
$VmConfig.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true

#仮想マシンを作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VmConfig -Verbose

既存の VHD から Windows 仮想マシンの作成

#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$StorageAccountName = "<ストレージ アカウント名>"
$DiskName = "<ディスク名>"
$ServiceName = "<クラウド サービス名>"
$Location = "<リージョン>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"

#ログイン、サブスクリプション指定 (事前に設定していれば省略可能)
Add-AzureAccount
Select-AzureSubscription -SubscriptionId $SubscriptionId
Set-AzureSubscription –SubscriptionId $SubscriptionId –CurrentStorageAccountName $StorageAccountName
 
#仮想マシンの設定を定義
$VmConfig = New-AzureVMConfig -Name $VmName -InstanceSize $VmSize -DiskName $DiskName
 
#クラウド サービスを作成
New-AzureService -ServiceName $ServiceName -Location $Location
 
#仮想マシンを作成
New-AzureVM –ServiceName $ServiceName -VMs $VmConfig

#RDP 用のエンドポイントを作成
Get-AzureVM -ServiceName $ServiceName -Name $VmName | Add-AzureEndpoint -Name "Remote Desktop" -Protocol "tcp" -PublicPort 3389 -LocalPort 3389 | Update-AzureVM
#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$ResourceGroupName = "<リソースグループ名>"
$Location = "<リージョン>"
$VhdUri = "<VHD ファイルパス>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"
$VnetName = "<仮想ネットワーク名>"
$SubnetName = "<サブネット名>"
$Nic1Name = "<NIC1 の名称>"

# ログインおよびサブスクリプションの指定
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

#リソース グループを作成
New-AzureRmResourceGroup –Name $ResourceGroupName -Location $Location

#仮想ネットワークを作成
New-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Location "East Asia" -Name $VnetName -AddressPrefix "192.168.0.0/16"
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName
Add-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $Vnet -AddressPrefix "192.168.1.0/24" |  Set-AzureRmVirtualNetwork
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]

# 仮想マシンの設定を定義
$VmConfig = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize
$VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -VhdUri $VhdUri -Name "OSDisk" -CreateOption attach -Windows -Caching ReadWrite

# 対象のサブネット情報を取得
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]

#NIC を作成、追加
$Nic1 = New-AzureRmNetworkInterface -Name $Nic1Name -ResourceGroupName $ResourceGroupName -Location $Location -Subnet $Subnet
$Nic1 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $Nic1Name
$VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -NetworkInterface $Nic1
$VmConfig.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true

#仮想マシンを作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VmConfig -Verbose

既存の VHD から Linux 仮想マシンの作成

#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$StorageAccountName = "<ストレージ アカウント名>"
$DiskName = "<ディスク名>"
$ServiceName = "<クラウド サービス名>"
$Location = "<リージョン>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"

#ログイン、サブスクリプション指定 (事前に設定していれば省略可能)
Add-AzureAccount
Select-AzureSubscription -SubscriptionId $SubscriptionId
Set-AzureSubscription –SubscriptionId $SubscriptionId –CurrentStorageAccountName $StorageAccountName
 
#仮想マシンの設定を定義
$VmConfig = New-AzureVMConfig -Name $VmName -InstanceSize $VmSize -DiskName $DiskName
 
#クラウド サービスを作成
New-AzureService -ServiceName $ServiceName -Location $Location
 
#仮想マシンを作成
New-AzureVM –ServiceName $ServiceName -VMs $VmConfig

#RDP 用のエンドポイントを作成
Get-AzureVM -ServiceName $ServiceName -Name $VmName | Add-AzureEndpoint -Name "Remote Desktop" -Protocol "tcp" -PublicPort 22 -LocalPort 22 | Update-AzureVM
#設定項目
#設定項目
$SubscriptionId = "<サブスクリプション ID>"
$ResourceGroupName = "<リソースグループ名>"
$Location = "<リージョン>"
$VhdUri = "<VHD ファイルパス>"
$VmName = "<仮想マシン名>"
$VmSize = "Standard_D1"
$VnetName = "<仮想ネットワーク名>"
$VnetPrefix = "<仮想ネットワークのアドレス帯>" #192.168.0.0/16 など
$SubnetName = "<サブネット名>"
$SubnetPrefix = "<サブネットのアドレス帯>" #192.168.1.0/24 など
$PublicIpName = "<パブリック IP の名称>"
$Nic1Name = "<NIC の名称>"

#ログイン、サブスクリプション指定 (事前に設定していれば省略可能)
#Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId
 
#リソース グループを作成
New-AzureRmResourceGroup –Name $ResourceGroupName -Location $Location
 
#仮想ネットワークを作成
New-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Location $Location -Name $VnetName -AddressPrefix $VnetPrefix
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName
Add-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $Vnet -AddressPrefix $SubnetPrefix |  Set-AzureRmVirtualNetwork
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]
 
#仮想マシンの設定を定義
$VmConfig = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize
$VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -VhdUri $VhdUri -Name "OSDisk" -CreateOption attach -Linux -Caching ReadWrite
 
#対象のサブネット情報を取得
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]

#パブリック IP の作成
New-AzureRmPublicIpAddress -ResourceGroupName $ResourceGroupName -Name $PublicIpName -AllocationMethod Dynamic -Location $Location
$PublicIp = Get-AzureRmPublicIpAddress -ResourceGroupName $ResourceGroupName -Name $PublicIpName

#NIC を作成、追加
$Nic1 = New-AzureRmNetworkInterface -Name $Nic1Name -ResourceGroupName $ResourceGroupName -Location $Location -Subnet $Subnet -PublicIpAddress $PublicIp
$Nic1 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $Nic1Name
$VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -NetworkInterface $Nic1
$VmConfig.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true
 
#仮想マシンを作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VmConfig

VHD の拡張・縮小 (パーティションの拡張は別途 OS 内で実施)

#事前に仮想マシンの停止が必要
$VmConfig = Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>"
$VmConfig.VM.OSVirtualHardDisk.ResizedSizeInGB = 1023
$VmConfig.VM.OSVirtualHardDisk | Update-AzureDisk -Label "OS Disk"
#事前に仮想マシンの停止が必要
$VmConfig = Get-AzureRmVM -Name "<仮想マシン名>" -ResourceGroupName "<リソース グループ名>"
$VmConfig.StorageProfile[0].OSDisk[0].DiskSizeGB = 1023
Update-AzureRmVM -ResourceGroupName "<リソース グループ名>" -VM $VmConfig

データ ディスクの追加・削除

Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Add-AzureDataDisk -CreateNew -DiskSizeInGB "<ディスク サイズ>" -DiskLabel "<ディスク名>" -LUN "<LUN 番号>" -HostCaching None | Update-AzureVM
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Remove-AzureDataDisk -LUN "<LUN 番号>" | Update-AzureVM
Get-AzureRmVM -ResourceGroupName "<リソース グループ名>" -Name "<仮想マシン名>" | Add-AzureRmVMDataDisk -CreateOption empty -DiskSizeInGB "<ディスク サイズ>" -Name "<ディスク名>" -Lun "<LUN 番号>" -VhdUri "<VHD 配置先のフルパス>" | Update-AzureRmVM
Get-AzureRmVM -ResourceGroupName "<リソース グループ名>" -Name "<仮想マシン名>" | Remove-AzureRmVMDataDisk -DataDiskNames "<ディスク名>" | Update-AzureRmVM

NIC の追加

#NIC の追加・削除・変更は不可
#VM 再作成が必要
#同一リソース グループ内にシングル NIC とマルチ NIC の環境混在は不可
#(シングル -> マルチ、マルチ -> シングルの変更不可、NIC 差し替えは可)
$SubscriptionId = "<サブスクリプション ID>"
$VmName = "仮想マシン名"
$VnetName = "仮想ネットワーク名"
$ResourceGroupName = "リソースグループ名"
$Location = "<リージョン>"
$Nic2Name = "NIC2 の名称"

$VmConfig = Get-AzureRmVM -Name $VmName -ResourceGroupName $ResourceGroupName
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]
$Nic2 = New-AzureRmNetworkInterface -Name $Nic2Name -ResourceGroupName $ResourceGroupName -Location $Location -Subnet $Subnet
$Nic2 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $Nic2Name
$VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -NetworkInterface $Nic2

エンドポイントの追加・削除 (ASM のみ、ARM はロードバランサーに設定)

Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Add-AzureEndpoint -Name "RDP" -Protocol "tcp" -PublicPort 3389 -LocalPort 3389 | Update-AzureVM
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Add-AzureEndpoint -Name "PowerShell" -Protocol "tcp" -PublicPort 5986 -LocalPort 5986 | Update-AzureVM

Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Remove-AzureEndpoint -Name "RDP" | Update-AzureVM
Get-AzureVM -ServiceName "<クラウド サービス名>" -Name "<仮想マシン名>" | Remove-AzureEndpoint -Name "PowerShell" | Update-AzureVM

可用性セットへの追加・削除

# 検証中
# いったん削除して、VM の再作成が必要 (以下参照)
# https://blogs.technet.microsoft.com/jpaztech/2016/06/08/addavasetvmarm/

アラート ルール用のメトリック取得 (ASM / ARM 共通)

#リソース ID は新ポータルで各リソースの [すべての設定] - [プロパティ] から確認
#メトリックが表示されない場合は、[診断] を有効化
#(例)
#/subscriptions/<サブスクリプション ID>/resourceGroups/<リソース グループ名>/providers/Microsoft.ClassicCompute/virtualMachines/<仮想マシン名>
#/subscriptions/<サブスクリプション ID>/resourceGroups/<リソース グループ名>/providers/Microsoft.Compute/virtualMachines/<仮想マシン名>
Get-MetricDefinitions -ResourceId "<リソース ID>"

アラート ルールの追加・取得・削除 (ASM / ARM 共通)

#上記で確認したリソース ID とメトリック名を使用
Add-AlertRule -RuleType Metric -Name "<アラート ルール名>" -ResourceGroup "<リソース グループ名>" -Operator GreaterThan -Threshold 70 -WindowSize 00:05:00 -ResourceId "<リソース ID>" -MetricName "\Processor(_Total)\% Processor Time" -TimeAggregationOperator Total
Get-AlertRule -ResourceGroup "<リソース グループ名>"
Remove-AlertRule -Name "<アラート ルール名>" -ResourceGroup "<リソース グループ名>"

VHD からの再展開 (万能スクリプト)

最新版は GitHub に移行。以下はバグバグしいので非推奨。

# Initialize
$VerbosePreference = "Continue"
 
# Import Module
Import-Module Azure
Import-Module AzureRm.Compute
Import-Module AzureRm.Network
Import-Module AzureRm.Storage
 
# Login
Login-AzureRmAccount
 
# Select Azure Subscription 
$subscriptionId = (Get-AzureRmSubscription | Out-GridView -Title "Select an Azure Subscription ..." -PassThru).SubscriptionId 
Select-AzureRmSubscription -SubscriptionId $subscriptionId
 
# Select Source VHD
$VhdUri = Read-Host -Prompt "Please input VHD Path"

# Select Additional Data Disks
$DataDisks = @()
$DataDiskCount = Read-Host -Prompt "Input Data Disk count"
for($i = 0; $i -lt $DataDiskCount; $i++){
    $DataDiskVhdUri = Read-Host -Prompt "Please input VHD Path for Data Disk $($i+1)"
    $DataDiskSizeInGB = Read-Host -Prompt "Please input VHD Size for Data Disk $($i+1)"
    $DataDisks += [PSCustomObject]@{"VhdUri" = $DataDiskVhdUri;"DiskSizeInGB" = $DataDiskSizeInGB;}
}
 
# Select Location
$Location = (Get-AzureRmLocation | Out-GridView -Title "Select Location ..." -PassThru).Location
 
# Select Resource Group
$ResourceGroups = @([PSCustomObject]@{"ResourceGroupName" = "Create New"; "Location" = "n/a"; "ResourceId" = "n/a";})
$ResourceGroups +=  (Get-AzureRmResourceGroup | Select-Object -Property ResourceGroupName, Location, ResourceId)
$ResourceGroup = $ResourceGroups | Out-GridView -Title "Select an Azure Resource Group ..." -PassThru
if($ResourceGroup.ResourceGroupName -eq "Create New"){
    $ResourceGroup.ResourceGroupName = Read-Host -Prompt "Please input Resource Group name"
    Write-Verbose "Creating new Availability Set `"$($ResourceGroup.ResourceGroupName)`""
    $ResourceGroup = New-AzureRmResourceGroup -Name $ResourceGroup.ResourceGroupName -Location $Location
}
 
# Select Deploy Type (Generalize / Specialize)
$DeploymentTypes = @(
    [PSCustomObject]@{"DeploymentType" = "Generalize"; "Description" = "Deploy from syspreped VHD file";}
    [PSCustomObject]@{"DeploymentType" = "Specialize"; "Description" = "Deploy from non-syspreped VHD file";}
)
$DeploymentType = ($DeploymentTypes | Out-GridView -Title "Select deployment type..." -PassThru).DeploymentType
 
# Selct OS Type
$OsTypes = @(
    [PSCustomObject]@{"OSType" = "Windows";}
    [PSCustomObject]@{"OSType" = "Linux";}
)
$OsType = ($OsTypes | Out-GridView -Title "Select OS type..." -PassThru).OSType
 
# Select Avaiability Set
$AvailabilitySets = @([PSCustomObject]@{"Name" = "Create New"; "Location" = "n/a"; "ResourceGroupName" = "n/a"; "Id" = "n/a"; })
$AvailabilitySets += (Get-AzureRmResourceGroup | Get-AzureRmAvailabilitySet | Select-Object -Property Name,  Location, ResourceGroupName, Id)
$AvailabilitySet = ($AvailabilitySets | Out-GridView -Title "Select Availability Set..." -PassThru).Name
if($AvailabilitySet -eq "Create New"){
    $AvailabilitySet = Read-Host -Prompt "Please input Availability Set name"
    Write-Verbose "Creating new Availability Set `"$AvailabilitySet`""
    $AvailabilitySet = New-AzureRmAvailabilitySet -ResourceGroupName $ResourceGroup.ResourceGroupName -Name $AvailabilitySet -Location $Location
}
 
# Select VM Size
$VmSize = (Get-AzureRmVMSize -Location $Location | Select-Object -Property Name, NumberOfCores, MemoryInMB, MaxDataDiskCount | Out-GridView -Title "Slect VM Size..." -PassThru)
 
# Select NIC Type
$NicTypes = @(
    [PSCustomObject]@{"NicType" = "Single NIC";}
    [PSCustomObject]@{"NicType" = "Multiple NIC";}
)
$NicType = ($NicTypes | Out-GridView -Title "Select NIC type..." -PassThru).NicType
 
# Select Virtual Network
$EmptySubnet = (New-Object -TypeName "Microsoft.Azure.Commands.Network.Models.PSSubnet")
$EmptySubnet = "n/a"
$VirtualNetworks = @([PSCustomObject]@{"Name" = "Create New"; "AddressSpace" = "n/a"; "Subnets" = $EmptySubnet; "Location" = "n/a"; "ResourceGroupName" = "n/a"; "Id" = "n/a"; })
$VirtualNetworks += (Get-AzureRmVirtualNetwork | Select-Object -Property Name, @{Name = "AddressSpace"; Expression = {$_.AddressSpace.AddressPrefixes -join ", "}}, Subnets, Location, ResourceGroupName, Id)
$VirtualNetwork = $VirtualNetworks | Out-GridView -Title "Select Virtual Network..." -PassThru
if($VirtualNetwork.Name -eq "Create New"){
    $VirtualNetwork.Name = Read-Host -Prompt "Please input Virtual Network name"
    $AddressPrefix = Read-Host -Prompt "Please input AddressPrefix"
    Write-Verbose "Creating new Virtual Network `"$($VirtualNetwork.Name)`""
    $VirtualNetwork = New-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup.ResourceGroupName -Name $VirtualNetwork.Name -Location $Location -AddressPrefix $AddressPrefix
    $SubnetCount = Read-Host -Prompt "Please input Subnet Count"
    if($SubnetCount -lt 1){Write-Error "Please input value greater equal 1."}
    for($i = 0; $i -lt $SubnetCount; $i++){
        $SubnetName = Read-Host -Prompt "Please input Subnet name"
        $SubnetAddressPrefix = Read-Host -Prompt "Please input address prefix"
        $VirtualNetwork = $VirtualNetwork | Add-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix
    }
     
    Write-Verbose "Updating Virtual Network `"$($VirtualNetwork.Name)`""
    $VirtualNetwork = Set-AzureRmVirtualNetwork -VirtualNetwork $VirtualNetwork
}
 
# Select Subnet
$Subnet = $VirtualNetwork.Subnets | Select-Object -Property Name, AddressPrefix, NetworkSecurityGroupText, RouteTableText, Id | Out-GridView -Title "Select Subnet..." -PassThru
if($Subnet.Name -eq "GatewaySubnet"){Write-Error "Can't select `"GatewaySubnet`"."}
 
# Select Public IP
$PublicIPs = @(
    [PSCustomObject]@{"Name" = "Create New"; "IpAddress" = "n/a"; "PublicIpAllocationMethod" = "n/a"; "Location" = "n/a"; "ResourceGroupName" = "n/a"; "Id" = "n/a"; }
    [PSCustomObject]@{"Name" = "None"; "IpAddress" = "n/a"; "PublicIpAllocationMethod" = "n/a"; "Location" = "n/a"; "ResourceGroupName" = "n/a"; "Id" = "n/a"; }
)
$PublicIPs += (Get-AzureRmPublicIpAddress | Where-Object {$_.IpConfiguration.Id -eq $null} | Select-Object -Property Name, IpAddress, PublicIpAllocationMethod, Location, ResourceGroupName, Id)
$PublicIP = $PublicIPs | Out-GridView -Title "Select Public IP..." -PassThru
if($PublicIP.Name -eq "Create New"){
    $PublicIP.Name = Read-Host -Prompt "Please input Public IP name"
    Write-Verbose "Creating new Public IP `"$($PublicIP.Name)`""
    $PublicIP = New-AzureRmPublicIpAddress -Name $PublicIp.Name -ResourceGroupName $ResourceGroup.ResourceGroupName -Location $Location -AllocationMethod Dynamic
}elseif($PubliIP.Name -eq "None"){
    $PublicIP.Name = $null
}
 
# Select NIC
$Nics = @([PSCustomObject]@{"Name" = "Create New"; "Location" = "n/a"; "ResourceGroupName" = "n/a"; "Id" = "n/a"; })
$Nics += (Get-AzureRmNetworkInterface | Where-Object {$_.IpConfigurations.Subnet.Id -eq $Subnet.Id} | Select-Object -Property Name, Location, ResourceGroupName, Id)
$Nic = $Nics | Out-GridView -Title "Select primary NIC..." -PassThru
if($Nic.Name -eq "Create New"){
    $Nic.Name = Read-Host -Prompt "Please input NIC name"
    Write-Verbose "Creating new NIC `"$($Nic.Name)`""
    if($PublicIP -eq $null){
        $Nic = New-AzureRmNetworkInterface -Name $Nic.Name -ResourceGroupName $ResourceGroup.ResourceGroupName -Location $Location -SubnetId $Subnet.Id
    }else{
        $Nic = New-AzureRmNetworkInterface -Name $Nic.Name -ResourceGroupName $ResourceGroup.ResourceGroupName -Location $Location -SubnetId $Subnet.Id -PublicIpAddressId $PublicIP.Id
    }
}
 
# Select Secondary Subnet / NIC
if($NicType -eq "Multiple NIC"){
    $SecondarySubnet = $VirtualNetwork.Subnets | Select-Object -Property Name, AddressPrefix, NetworkSecurityGroupText, RouteTableText, Id | Out-GridView -Title "Select secondary Subnet..." -PassThru
    if($SecondarySubnet.Name -eq "GatewaySubnet"){Write-Error "Can't select `"GatewaySubnet`"."}
     
    $SecondaryNics = @([PSCustomObject]@{"Name" = "Create New"; "Location" = "n/a"; "ResourceGroupName" = "n/a"; "Id" = "n/a"; })
    $SecondaryNics += (Get-AzureRmNetworkInterface | Where-Object {$_.IpConfigurations.Subnet.Id -eq $SecondarySubnet.Id} | Select-Object -Property Name, Location, ResourceGroupName, Id)
    $SecondaryNic = $SecondaryNics | Out-GridView -Title "Select secondary NIC..." -PassThru
    if($SecondaryNic.Name -eq "Create New"){
        $SecondaryNic.Name = Read-Host -Prompt "Please input secondary NIC name"
        Write-Verbose "Creating new NIC `"$($SecondaryNic.Name)`""
        New-AzureRmNetworkInterface -Name $SecondaryNic.Name -ResourceGroupName $ResourceGroup.ResourceGroupName -Location $Location -SubnetId $SecondarySubnet.Id
    }
}
 
# Create VM
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup.ResourceGroupName -Name $VirtualNetwork.Name
$Subnet = $Vnet.Subnets | Where-Object {$_.Id -eq $Subnet.Id}
  
$VmName = Read-Host -Prompt "Please input VM name"
$VmConfig = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize.Name
 
$Nic1 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroup.ResourceGroupName -Name $Nic.Name
$VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -Id $nic1.Id -Primary
 
if($NicType -eq "Multiple NIC"){
    $Nic2 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroup.ResourceGroupName -Name $SecondaryNic.Name
    $VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -Id $nic2.Id
}
  
 
if($DeploymentType -eq "Generalize"){
    $Credential = Get-Credential
    if($OsType -eq "Windows"){
        $VmConfig = Set-AzureRmVMOperatingSystem -VM $VmConfig -Windows -ComputerName $VmName -Credential $Credential
    }elseif($OsType -eq "Linux"){
        $VmConfig = Set-AzureRmVMOperatingSystem -VM $VmConfig -Linux -ComputerName $VmName -Credential $Credential
    }
    $OsDiskUri = ((Split-Path $VhdUri -Parent) -replace "\\","/") + "/$($VmName)OSDisk.vhd"
    if($OsType -eq "Windows"){
        $VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -Name "OSDisk" -VhdUri $OsDiskUri -CreateOption fromImage -SourceImageUri $VhdUri -Windows
    }elseif($OsType -eq "Linux"){
        $VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -Name "OSDisk" -VhdUri $OsDiskUri -CreateOption fromImage -SourceImageUri $VhdUri -Linux
    }
}elseif($DeploymentType -eq "Specialize"){
    if($OsType -eq "Windows"){
    $VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -Name "OSDisk" -VhdUri $VhdUri -CreateOption attach -Windows
    }elseif($OsType -eq "Linux"){
    $VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -Name "OSDisk" -VhdUri $VhdUri -CreateOption attach -Linux
    }
}
if($DataDiskCount -ge 1){
    for($i = 0; $i -lt $DataDiskCount; $i++){
        $VmConfig = Add-AzureRmVMDataDisk -VM $VmConfig -VhdUri $DataDisks[$i].VhdUri -Name "DataDisk$($i+1)" -CreateOption Attach -Lun $i -DiskSizeInGB $DataDisks[$i].DiskSizeInGB
    }
}
if($AvailabilitySet.Id -ne $null){
    $VmConfig.AvailabilitySetReference = $AvailabilitySet.Id
}
New-AzureRmVM -ResourceGroupName $ResourceGroup.ResourceGroupName -Location $Location -VM $VmConfig -Verbose

以降、順次更新予定。

No.1 に GitHub 使えって言われたから適当に移動するかもです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です