Разобрать файл YAML в Powershell

#powershell #yaml #powershell-3.0 #apiconnect

#powershell #yaml #powershell-3.0 #apiconnect

Вопрос:

Я хочу проанализировать файл YAML из IBM API Connect в файле PowerShell. Я не смогу размещать сторонние пакеты или библиотеки DLL, поскольку проверка безопасности с этим не согласится.

 ---
product: "1.0.0"
info:
  name: "api2product"
  title: "API2product"
  version: "1.0.0"
visibility:
  view:
    enabled: true
    type: "public"
    tags: []
    orgs: []
  subscribe:
    enabled: true
    type: "authenticated"
    tags: []
    orgs: []
apis:
  api1:
    $ref: "api1_1.0.0.yaml"
  api2:
    $ref: "api2_1.0.0.yaml"
  api3:
    $ref: "api3_1.0.0.yaml"
  api4:
    $ref: "api4_1.0.0.yaml"
  api5:
    $ref: "api5_1.0.0.yaml"
plans:
  default:
    title: "Default Plan"
    description: "Default Plan"
    approval: false
    rate-limit:
      hard-limit: false
      value: "100/hour"
  

Мне интересно получить только связанные с ним файлы API YAML, для которых я погуглил и разработал образец кода PowerShell, который фактически выполняется.

 $text = Get-Content -Path "C:UsersabhiDesktopprojectsTRYGGitLabAPIPOCtest.yaml"
$regex = '(?ms)apis:(. ?)plans:'
$text = $text -join "`n"
$OutputText = [regex]::Matches($text, $regex) |
              foreach {$_.Groups[1].Value -split $regex}
$OutputText = $OutputText.Replace("`$ref:", "")
$OutputText = $OutputText.Replace(":", "=")
$OutputText = $OutputText.Replace("=`n", "=")
$OutputText = $OutputText.Replace("`"", "")
$AppProps = ConvertFrom-StringData ($OutputText)
$AppProps.GetEnumerator() | ForEach-Object {$_.Value}
[string[]]$l_array = $AppProps.Values | Out-String -Stream
  

Есть ли какой-либо простой способ добиться этого вместо нескольких замен в строке?

Комментарии:

1. YAML — это иерархический формат, в то время как ConvertFrom-StringData обрабатывает список простых пар ключ / значение в виде хэш-таблицы. Можете ли вы получить входные данные в формате JSON вместо YAML? PowerShell поставляется с анализатором для первого.

2. Основываясь на этом, Вы можете легко преобразовать файл YAML в JSON и использовать встроенный анализатор с PowerShell. python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < file.yaml > file.json Вам потребуется установить PyYAML, но это должно сработать.

3. @AnsgarWiechers Я не могу контролировать формат входных данных. Он будет представлен только в формате YAML. Мне нужно обработать десятки файлов yaml

4. Почему вы можете устанавливать Python и модули Python, но не модули PowerShell? Это не имеет смысла.

5. Если есть бизнес-необходимость разобрать YAML из сценария PowerShell, то вы должны настаивать на том, чтобы это было возможно. Если ваша служба безопасности блокирует это, то ваша проблема здесь не техническая.

Ответ №1:

Я предлагаю вам использовать открытый лицензионный модуль, такой как Phil-Factor / PSYaml, поскольку это не тривиальная задача.

Затем вы можете сохранить изолированную версию, которую вы поддерживаете самостоятельно.