Как сохранить выходные данные сценария Powershell в формате csv в репозиториях Azure Git после выполнения сценария из конвейера выпуска Azure DevOps?

#azure-devops #azure-powershell

Вопрос:

У меня есть сценарий powershell, который генерирует отчет CSV для некоторых проверок в подписке Azure. Этот сценарий хранится в Azure git и выполняется через конвейер выпуска Azure DevOps с использованием параметров для различных подписок и ресурсов. Выходной путь к файлу csv также параметризуется. Как я могу сохранить выходной отчет csv с соглашением об именовании меток даты и времени в репозитории Azure Git как часть выполнения конвейера/сценария?

Ответ №1:

Вы можете использовать API Push — Create REST из своего конвейера/задачи для добавления файла в репозиторий.

Пример запроса на добавление текстового файла:

 POST https://dev.azure.com/fabrikam/_apis/git/repositories/{repositoryId}/pushes?api-version=6.0
 

Тело запроса

 {
  "refUpdates": [
    {
      "name": "refs/heads/master",
      "oldObjectId": "8b67126d2500e28c771f82c9ddc292679978197c"
    }
  ],
  "commits": [
    {
      "comment": "Added task markdown file.",
      "changes": [
        {
          "changeType": "add",
          "item": {
            "path": "/tasks.md"
          },
          "newContent": {
            "content": "# Tasksnn* Item 1n* Item 2",
            "contentType": "rawtext"
          }
        }
      ]
    }
  ]
}
 

Проверьте ссылку на API REST для других примеров.

Ответ №2:

Как я могу сохранить выходной отчет csv с соглашением об именовании меток даты и времени в репозитории Azure Git как часть выполнения конвейера/сценария?

Вы можете добавить задачу PowerShell в конвейер выпуска для запуска Rest API: Добавьте двоичный файл

Чтобы сохранить csv-файл с меткой даты и времени, вы можете использовать скрипт Get-date для получения даты.

Вот полный пример PowerShell:

 $file= [IO.File]::ReadAllBytes("filepatha.csv")
$Base64file= [Convert]::ToBase64String($file)
echo $Base64file

$timestamp = Get-Date -Format "yyyy-MM-dd"


$token = "PAT"

$url="https://dev.azure.com/{Organization}/_apis/git/repositories/{repoid}/pushes?api-version=6.0"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$JSON = "
    {
  `"refUpdates`": [
    {
      `"name`": `"refs/heads/main`",
      `"oldObjectId`": `"Oldcommitid`"
    }
  ],
  `"commits`": [
    {
      `"comment`": `"Added new csv file.`",
      `"changes`": [
        {
          `"changeType`": `"add`",
          `"item`": {
            `"path`": `"b-$timestamp.csv`"
          },
          `"newContent`": {
            `"content`": `"$Base64file`",
            `"contentType`": `"base64encoded`"
          }
        }
      ]
    }
  ]
    }"


$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json

echo $response
 

Результат:

введите описание изображения здесь

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

1. Спасибо Бхаргави и Кевину за ответ. извините за задержку с ответом на эти решения. Что я пытаюсь сделать, так это — я использую объект PSCustom и добавляю значения требуемых проверок со всеми другими сведениями о ресурсах. Итак, как я могу добавить и сохранить этот CSV-файл в ADO, используя метод PSCustomObject.