iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0

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.

方法一:透過 PowerShellGet 裡的 Find-Module

搜尋所有模組

可以使用 Find-Module 來列出 PowerShell Gallery( PowerShell 官方提供的模組庫 ) 中的所有模組。由於模組數量龐大,你可以限制列出的數量:

Find-Module -Repository PSGallery | Select-Object -First 10

https://ithelp.ithome.com.tw/upload/images/20240922/20168708PANU7PJmdk.png

搜尋特定類型的模組

搜尋特定名稱或關鍵字的模組,可以加上 -Name 或 -Filter 參數。例如,搜尋與 Azure 相關的模組:

Find-Module -Name Az* -Repository PSGallery
Find-Module -Filter "Azure" -Repository PSGallery

確認模組詳細資訊

Find-Module -Name 模組名稱 | Format-List

透過 Install-Module 安裝模組

使用 Install-Module 命令來安裝所需的模組。例如,安裝 Az 模組(Azure 模組)的指令如下:

Install-Module -Name Az -AllowClobber -Scope CurrentUser
  • -Name:指定要安裝的模組名稱。
  • -AllowClobber:允許覆蓋現有的模組命令。
  • -Scope CurrentUser:將模組安裝在目前使用者範圍內,不需要管理員權限。如果想全域安裝,將 -Scope 改為 AllUsers 並以管理員身份執行。

第一次安裝模組時,PowerShell 可能會提示你安裝 NuGet 提供者,請選擇 Y 或 A 以繼續。

確認模組已成功安裝

Get-Module -ListAvailable -Name Az

方法二:透過網站 Powershell Gallery 搜尋

https://www.powershellgallery.com
就像使用一般的搜尋引擎,Azure 的模組稱為 Az,在搜尋引擎上搜尋該關鍵字後,點擊有興趣的模組,會顯示安裝指令。
https://ithelp.ithome.com.tw/upload/images/20240922/20168708b6EsrpPax0.pnghttps://ithelp.ithome.com.tw/upload/images/20240922/20168708qqCJCAxlbg.png


範例

接下來我打算為 PowerShell 安裝能管理 Azure Virtual machines 的模組

Find-Module -Filter "Virtual machines" -Repository PSGallery

https://ithelp.ithome.com.tw/upload/images/20240922/201687085RWy72UxM9.png
確認 Az.Compute 的模組細節

Find-Module -Name Az.Compute | Format-List

https://ithelp.ithome.com.tw/upload/images/20240922/20168708JNQJWutck7.png
安裝 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

https://ithelp.ithome.com.tw/upload/images/20240922/201687082huPrpI1L0.png
當然爾,要先登入才能使用,帶上 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 - 物件:另一種形式的資料


上一篇
Day 7 - 管線:串接命令 Part 2
下一篇
Day 9 - 物件:另一種形式的資料
系列文
《30天挑戰精通 PowerShell:從 Windows Server 到 Azure DevOps 自動化之旅》30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言