Microsoft 不斷地為各種產品(Azure Compute、Azure SQL、Azure DNS 等等)開發出對應的命令,那些產品我們會透過 Azure Portal 來管理他們,但是你可以透過安裝(擴充)其對應的 module 在自已的 PowerShell 上,讓 PowerShell 直接就可以操作那些 cloud based 的產品。
書中舉了一個例子:
shell 怎麼可能是萬能的呢?讓我們試想一下你的智慧型手機。你要如何不升級作業系統的情況下,為手機增加功能呢?答案是安裝一個 App。
而 PowerShell 的運作方式其實相仿。PowerShell 稱其擴充功能為模組(module)。可以使其增加命令。
安裝模組所使用的命令( Function )是透過 PowerShell 裡的 PowerShellGet 模組所提供的。
PS /Users/kanglin/code/30days> Get-Command Install-Module | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Function Install-Module 2.2.5 PowerShellGet
通常會自帶在 PowerShell 中。但建議先更新至最新版本,以避免安裝模組時出現問題。執行以下命令檢查並更新:
PS /Users/kanglin/code/30days> Install-Module -Name PowerShellGet -Force -AllowClobber
記得要使用系統管理員權限進行更新,不然可能會像我一樣出現下列的 WARNING。
WARNING: The version 'y.y.y.y' of module 'xxxx' is currently in use. Retry the operation after closing the applications.
可以使用 Find-Module 來列出 PowerShell Gallery( PowerShell 官方提供的模組庫 ) 中的所有模組。由於模組數量龐大,你可以限制列出的數量:
Find-Module -Repository PSGallery | Select-Object -First 10
搜尋特定名稱或關鍵字的模組,可以加上 -Name 或 -Filter 參數。例如,搜尋與 Azure 相關的模組:
Find-Module -Name Az* -Repository PSGallery
Find-Module -Filter "Azure" -Repository PSGallery
Find-Module -Name 模組名稱 | Format-List
使用 Install-Module 命令來安裝所需的模組。例如,安裝 Az 模組(Azure 模組)的指令如下:
Install-Module -Name Az -AllowClobber -Scope CurrentUser
第一次安裝模組時,PowerShell 可能會提示你安裝 NuGet 提供者,請選擇 Y 或 A 以繼續。
Get-Module -ListAvailable -Name Az
https://www.powershellgallery.com
就像使用一般的搜尋引擎,Azure 的模組稱為 Az,在搜尋引擎上搜尋該關鍵字後,點擊有興趣的模組,會顯示安裝指令。
接下來我打算為 PowerShell 安裝能管理 Azure Virtual machines 的模組
Find-Module -Filter "Virtual machines" -Repository PSGallery
確認 Az.Compute 的模組細節
Find-Module -Name Az.Compute | Format-List
安裝 Az.Compute
Install-Module -Name Az.Compute -AllowClobber -Scope AllUsers
在安裝過程中,系統彈出提示,詢問是否信任並要從這個資源中心進行安裝,選擇 Y
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the
modules from 'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A
驗證
PS /Users/kanglin/code/30days> Get-Module -ListAvailable -Name Az* | Format-Table -AutoSize
Directory: /usr/local/share/powershell/Modules
ModuleType Version PreRelease Name PSEdition ExportedCommands
---------- ------- ---------- ---- --------- ----------------
Script 3.0.4 Az.Accounts Core,Desk {Disable-AzDataCollection, Disable-AzContextAutosave, Enable-AzDataCollection, Enable-AzContextAutosave…}
Script 8.3.0 Az.Compute Core,Desk {Add-AzImageDataDisk, Add-AzVhd, Add-AzVMAdditionalUnattendContent, Add-AzVMDataDisk…}
透過 get-command 搜尋所有從新模組 Az.Compute 提供的 Get 命令
Get-Command -Module Az.Compute -Verb Get
當然爾,要先登入才能使用,帶上 UseDeviceAuthentication,就能自己選擇要用什麼瀏覽器開啟。
Connect-AzAccount -UseDeviceAuthentication
將在 ResourceGroup11 下的 VM 資源列出
Example 3: Get properties for all virtual machines in a resource group
Get-AzVM -ResourceGroupName "ResourceGroup11"
ResourceGroupName Name Location VmSize OsType NIC
----------------- ---- -------- ------ ------ ---
ResourceGroup11 test1 eastus Standard_DS1_v2 Windows test1
ResourceGroup11 test2 westus Standard_DS1_v2 Windows test2
ResourceGroup11 test3 eastus Standard_DS1_v2 Windows test3
This command gets properties for all the virtual machines in the resource group named ResourceGroup11.
Day 9 - 物件:另一種形式的資料