我只需要從表中選擇一個值。
代碼是:
az vm list-ip-addresses --name VMname --resource-group GroupName --out table
我得到如下結果
VirtualMachine PublicIPAddresses PrivateIPAddresses
---------------- ------------------- --------------------
VMName XX.XX.XX.XX XX.XX.XX.XX
我只想選擇PublicIPAddresses值并將其提取到 csv。
TIA
uj5u.com熱心網友回復:
輸出格式選項 --output table( -o table)用于人性化(表格)顯示,而不是用于編程處理。
最好使用基于結構化文本的輸出格式,例如 JSON。事實上,JSON 是默認輸出格式,因此您可以簡單地省略您的--out table引數并使用它ConvertFrom-Json來決議輸出并提取感興趣的值:
# Outputs all public IP addresses contained in the JSON response.
# Since you're targeting only a *single* VM, the address(es) all refer to that VM.
$ip =
(
az vm list-ip-addresses --name VMname --resource-group GroupName |
ConvertFrom-Json
).virtualMachine.network.publicIpAddresses.ipaddress
假定回傳的 JSON 資料的結構與此問題中的相同。
請注意,您可以通過使用引數在 source 處執行JMESPath查詢來簡化操作,以便直接回傳唯一感興趣的值:--query
$ip =
(az vm list-ip-addresses --query '[].virtualMachine.network.publicIpAddresses[].ipAddress' --name VMname --resource-group GroupName |
ConvertFrom-Json)
筆記:
- 您可以使用 進一步簡化此操作
--output tsv,在這種情況下您不需要ConvertTo-Json呼叫 - 見下文。
根據這個答案,以下使用子命令的較短替代方法- 而不是- 也適用:az vm showaz vm list-ip-addresses
$ip =
az vm show --show-details --resource-group --name vmName --query publicIps --output tsv
筆記:
上面使用了不同的結構化文本格式,TSV(制表符分隔值),
--output tsv在這種簡單的情況下,無需在 PowerShell 端進行后處理:- 該查詢僅回傳一個或多個字串值,這些值以 TSV 格式按原樣輸出,并且如果有多個字串,則每個字串都在其自己的行上。PowerShell 將其捕獲為單個字串或字串數??組。
提取多個VM(資源組中的所有 VM)的公共 IP:
# Returns the names and public IP addresses for all VMs in the
# given resource group, as [pscustomobject] instances with
# .name and .publicIds properties (the latter being an array).
$objects =
az vm list-ip-addresses --query '[].virtualMachine.{ name: name, publicIps: network.publicIpAddresses[].ipAddress }' --resource-group GroupName |
ConvertFrom-Json
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513256.html
上一篇:Powershell,在一個腳本中將2個變數捆綁在一起
下一篇:錯誤:Connect-MgGraph-AccessToken$token-Scopes"User.ReadWrite.All"
