【问题标题】:how to split a string in powershell based on output from azure command如何根据 azure 命令的输出在 powershell 中拆分字符串
【发布时间】:2021-08-21 01:17:17
【问题描述】:

我有一个我正在尝试编写的 powershell 脚本。我需要从控制台获取一些输入/输出并将其传送到拆分命令中,但我不知道如何。

我正在运行一个 azure cli 命令...列出一堆资源。我需要提取存储帐户的名称。 这是一些示例输出:

Name                  ResourceGroup    Location      Type   
------------------    -------------    ------------  ----------  
asdf1234-insights        jjResourceGrp     eastus    microsoft.insights/components
asdf1234-storage         jjResourceGrp     eastus    Microsoft.Storage/storageAccounts
asdf1234                 jjResourceGrp     eastus    Microsoft.Web/serverFarms
asdf1234                 jjResourceGrp     eastus    Microsoft.Web/sites

这是我现在用来查找存储帐户的 powershell 命令:

az resource list -g jjResourceGrp -o table | Select-String -Pattern "storageAccounts"

但我真正需要的是从该行中提取“asdf1234-storage”。 任何帮助将不胜感激。

【问题讨论】:

  • 有什么理由不使用相应的 Az PowerShell cmdlet?
  • 天哪,我很高兴能帮助进行文本解析!要安装 Azure 模块,您可以执行 Find-Module -Name 'Az' | Install-Module
  • @Ash 为什么你这样做我们都想看到一些regex 在行动:(
  • 编辑我上面的评论为时已晚,但您需要在 Az cmdlet 中使用 here is the function。如果您不能使用 Az cmdlet,那么为什么不将您的输出保留为默认值,即 json,然后使用 ConvertFrom-Json 将您的输出转换为可导航对象? [咧嘴一笑] @TeamRegex
  • @SantiagoSquarzon 这里不需要正则表达式。 (az resource list -g jjResourceGrp -o table) -replace '\s+',','|convertfrom-csv|?{$_.type -match 'storageaccounts'}|% Name 没问题

标签: powershell azure-cli


【解决方案1】:

正如Ash 指出的那样:

  • 最好使用 PowerShell 命令输出您可以对其属性进行操作的对象,在这种情况下需要安装 @ 987654322@ PowerShell 模块 (Install-Module Az),然后您可以调用Get-AzStorageAccount

  • 如果您正在与 外部程序 进行交互,例如 az CLI,则必须处理 text(字符串)输出,使后续处理复杂化:

    • 下一个最佳选择是处理外部程序的结构化文本输出格式(如果可用),例如 CSV 或 JSON;事实上,正如 Ash 还指出的那样,az CLI 的 default output format JSON,因此您可以省略 -o table 并使用 ConvertFrom-Json 进一步处理输出

    • 如果没有,文本解析是必需的,通常基于regexes,例如通过-replace-split 运算符。


按要求回答问题(因为文本解析非常有趣):

switch 语句与其-Regex 开关相结合提供了一个简洁的解决方案:

switch -Regex (az resource list -g jjResourceGrp -o table) {
  '^(\w+).*\bstorageAccounts\b' {
    $Matches[1]; break
  }
}

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多