Упражнение. Параметры

Завершено

На этом уроке в качестве терминала Linux необходимо использовать Azure Cloud Shell в правой части экрана. Azure Cloud Shell — это оболочка, к которой можно получить доступ на портале Azure или по адресу https://shell.azure.com. Для ее использования на компьютере ничего устанавливать не нужно.

Одним из способов повышения универсальности сценариев является использование параметров, с помощью которых пользователи могут вводить данные во время выполнения сценария. В этом упражнении вы создадите сценарий резервного копирования и добавите в него параметры.

Создание сценария резервного копирования

Обычной задачей является создание резервной копии. Резервная копия обычно представляет собой сжатый файл, в котором хранятся все файлы, принадлежащие, например, какому-то приложению. При установке PowerShell появляется командлет Compress-Archive, который можно использовать для решения этой задачи.

  1. В терминале Cloud Shell выполните следующие команды Bash:

    mkdir app
    cd app
    touch index.html app.js
    cd ..
    

    Теперь у вас должен быть каталог с именем приложения. Все готово для работы с PowerShell.

  2. В том же терминале запустите оболочку PowerShell (если она еще не запущена), выполнив команду pwsh:

    pwsh
    
  3. Создайте файл скрипта с именемBackup.ps1 в текущем каталоге и откройте его в редакторе кода.

    touch Backup.ps1
    code Backup.ps1
    
  4. Добавьте в этот файл содержимое и сохраните его. Для сохранения можно использовать CTRL-S в Windows и Linux или CMD+S на Mac.

    $date = Get-Date -format "yyyy-MM-dd"
    Compress-Archive -Path './app' -CompressionLevel 'Fastest' -DestinationPath "./backup-$date"
    Write-Host "Created backup at $('./backup-' + $date + '.zip')"
    

    Сценарий вызывает Compress-Archive и использует три параметра:

    • -Path — это каталог файлов, который необходимо сжать.
    • -CompressionLevel задает степень сжатия файлов.
    • -DestinationPath – это путь к полученному сжатому файлу.
  5. Запустите скрипт:

    ./Backup.ps1 
    

    Вы должны увидеть следующий результат:

    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

Добавление параметров в сценарий

Если в сценарий добавлены параметры, пользователи могут указывать значения во время его выполнения. Добавьте параметры в сценарий резервного копирования, чтобы установить конфигурацию расположений исходных файлов и полученного ZIP-файла.

  1. Добавьте следующий код в начало файлаBackup.ps1 .

    Примечание.

    Используйте команду code Backup.ps1, чтобы открыть файл, если редактор не открыт.

    Param(
      [string]$Path = './app',
      [string]$DestinationPath = './'
    )
    

    Вы добавили в сценарий два параметра: $Path и $DestinationPath. Вы также указали значения по умолчанию, чтобы пользователям не нужно было задавать значения. Пользователи могут при необходимости менять значения по умолчанию. Чтобы использовать эти параметры, необходимо настроить сценарий. Далее показано, как это сделать.

  2. Для использования параметров измените код в файле и сохраните файл. Backup.ps1 теперь должен выглядеть следующим образом:

    Param(
      [string]$Path = './app',
      [string]$DestinationPath = './'
    )
    $date = Get-Date -format "yyyy-MM-dd"
    Compress-Archive -Path $Path -CompressionLevel 'Fastest' -DestinationPath "$($DestinationPath + 'backup-' + $date)"
    Write-Host "Created backup at $($DestinationPath + 'backup-' + $date + '.zip')"
    
  3. Переименуйте каталог приложения в веб-приложение , выполнив следующую команду:

    mv app webapp
    

    Переименование каталога app имитирует тот факт, что не все каталоги, которые нужно резервировать, будут называться app.

    Это не позволяет опираться на значение по умолчанию $Path. При выполнении сценария необходимо указать значение через консоль.

  4. Удалите файл резервной копии, заменив <current date as YYYY-MM-DD> текущей датой:

    rm backup-<current date as YYYY-MM-DD>.zip
    

    Удалите этот файл, чтобы убедиться в том, что на экране появляется сообщение о том, что указанное значение $Path не существует. В противном случае вы получите сообщение о том, что ZIP-файл уже существует, и проблема, которую мы пытаемся решить, будет скрыта.

  5. Выполните сценарий, не указывая параметры. (Сценарий будет использовать значения параметров по умолчанию.)

    ./Backup.ps1
    

    Отобразится сообщение об ошибке следующего вида:

    Line |
       8 |  Compress-Archive -Path $Path -CompressionLevel 'Fastest' -Destination …
         |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | The path './app' either does not exist or is not a valid file system path.
    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

    Скрипт уведомляет вас о том, что он не может найти каталог ./app. Теперь укажите значение для параметра $Path и оцените преимущество добавления параметров в сценарий.

  6. Протестируйте сценарий, выполнив его:

    ./Backup.ps1 -Path './webapp'
    

    Отобразится сообщение, аналогичное тому, которое отображалось ранее:

    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

    Теперь вы можете использовать параметры, если каталог, для которого требуется создать резервную копию, не называется ./app, или, если вы хотите поместить сжатый файл в другой каталог, а не в текущий.

Поздравляем. Вы создали сценарий резервного копирования, который можно использовать, при необходимости создать резервную копию каталога приложения или любого другого важного каталога. Затем вы определили компоненты сценария, которые может потребоваться часто изменять, и заменили статические значения значениями параметров. Таким образом, скорее всего, вам не потребуется изменить сам скрипт при изменении требований (например, если имя приложения изменится или необходимо изменить путь назначения).