Azure 基礎:用 PowerShell 自動登入

sparkdev發表於2017-01-30

PowerShell 是管理 Azure 的最好方式,因為我們可以使用指令碼把很多的工作自動化。比如把 Azure 上的虛擬機器關機,並在適當的時間把它開機,這樣我們就能節省一些開支,當然我們同時也為減少二氧化碳的排放做出了貢獻!

PowerShell 的 Azure 模組中為我們提供了不同的 API, 早期的叫 ASM(Azure Service Manager)。隨著 Azure 的發展變化,又出現了一套新的 API 叫 ARM(Azure Resource Management)。我們這裡僅介紹如何使用 ARM 中的 API 實現自動登入並且操作 Azure 上的資源。

使用 PowerShell 自動登入 Azure 的大體思路是這樣的:首先使用登入命令在互動式介面下進行登入操作,然後使用 Save-AzureRmProfile 命令把你的登入認證資訊儲存到本地的檔案中。以後在指令碼中進行自動登入時,只要使用這個本地檔案就可以了。下面讓我們來看看具體的操作過程。

使用 Login-AzureRmAccount 命令登入

在登入前先檢查一下當前的登入狀態,我們通過查詢 Resource Group 來間接的進行。
執行命令:Get-AzureRmResourceGroup

因為沒有登入,查詢失敗並提示我們進行登入。

執行命令:Login-AzureRmAccount
通過彈出的對話方塊登入:

登入成功後會顯示你的賬戶資訊:

好了現在讓我們再來執行一次 Get-AzureRmResourceGroup 命令。

之前的錯誤資訊已經沒有了,輸出的結果為 Resource Group 的列表。

把登入資訊儲存到檔案中

Save-AzureRmProfile 命令能夠把當前 session 的登入資訊儲存到檔案中,在其他的 session 中就可以使用這個檔案進行自動登入。
執行命令:Save-AzureRmProfile -Path “d:\test\myprofile.json”
myprofile.json 是一個普通的文字檔案,只有認證資訊被加密了,其它的資訊都是可讀的。

注意,一定要保護好生成的 myprofile.json 檔案,如果洩露出去和別人拿到你的賬戶密碼是一樣的。

自動登入 Azure

Select-AzureRmProfile 命令從檔案中載入使用者的登入資訊並且設定 Azure 的執行上下文。
Select-AzureRmProfile –Path “d:\test\myprofile.json”
執行結果和我們執行 Login-AzureRmAccount 命令是一樣的:

一個自動重啟虛擬機器的例子

我們通過重啟 Azure 上的一臺虛機來完成一個完整的例子:

$profile = "your profile path"
$resourceGroupName = "your resource group name"
$vmName = "your vm name"
$logfile = "log file name"
# 自定義日誌方法
Function LogWrite
{
    Param ([string]$logstring)
    $now = Get-Date
    $logcontent = $now.ToShortDateString() + " " + $now.ToShortTimeString() + ": " + $logstring    
    Add-Content $logfile -value $logcontent
}

LogWrite("before Select-AzureRmProfile.")
Select-AzureRmProfile -Path $profile
LogWrite("after Select-AzureRmProfile.")

LogWrite("before Restart-AzureRmVM.")
Restart-AzureRmVM -ResourceGroupName $resourceGroupName -Name $vmName
LogWrite("after Restart-AzureRmVM.")

好了,一個簡單的自動化工作就完成了!

相關文章