Ejercicio: Parámetros

Completado

En esta unidad, usará Azure Cloud Shell en el lado derecho de la pantalla como terminal de Linux. Azure Cloud Shell es un shell al que puede acceder mediante Azure Portal o desde https://shell.azure.com. Para usarlo no es necesario instalar nada en el equipo.

Una manera de hacer que los scripts sean flexibles consiste en usar parámetros para que los usuarios puedan proporcionar entradas cuando se ejecute el script. En este ejercicio, creará un script de copia de seguridad y le agregará parámetros.

Creación de un script de copia de seguridad

Una tarea común es crear una copia de seguridad. Una copia de seguridad suele ser un archivo comprimido que almacena todos los archivos que pertenecen a una aplicación, por ejemplo. Cuando instaló PowerShell, obtuvo el cmdlet Compress-Archive, que puede ayudarle a completar esta tarea.

  1. En el terminal Cloud Shell, ejecute estos comandos de Bash:

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

    Ahora debería tener un directorio denominado app. Ya está listo para trabajar con PowerShell.

  2. En el mismo terminal, inicie un shell de PowerShell (si aún no se ha iniciado). Para ello, ejecute pwsh:

    pwsh
    
  3. Cree un archivo de script denominado Backup.ps1 en el directorio actual y ábralo en el editor de código.

    touch Backup.ps1
    code Backup.ps1
    
  4. Agregue este contenido al archivo y guárdelo. Puede usar CTRL+S en Windows y Linux o CMD+S en Mac para guardar.

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

    El script invoca Compress-Archive y usa tres parámetros:

    • -Path es el directorio de los archivos que quiere comprimir.
    • -CompressionLevel especifica cuánto se deben comprimir los archivos.
    • -DestinationPath es la ruta de acceso al archivo comprimido resultante.
  5. Ejecute el script:

    ./Backup.ps1 
    

    Debería ver este resultado:

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

Adición de parámetros al script

Si agrega parámetros al script, los usuarios podrán proporcionar valores cuando se ejecute. Agregará parámetros al script de copia de seguridad para habilitar la configuración de las ubicaciones de los archivos de origen y del archivo ZIP resultante.

  1. Agregue el código siguiente en la parte superior del archivo Backup.ps1.

    Nota:

    Use el comando code Backup.ps1 para abrir el archivo si el editor no está abierto.

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

    Ha agregado dos parámetros al script: $Path y $DestinationPath. También ha indicado valores predeterminados para que los usuarios no tengan que proporcionar valores. Los usuarios pueden invalidar los valores predeterminados si es necesario. Debe ajustar el script para que use estos parámetros. Lo hará a continuación.

  2. Cambie el código del archivo para usar los parámetros y luego guarde el archivo. Backup.ps1 debería tener un aspecto similar al siguiente:

    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. Cambie el nombre del directorio app a webapp mediante este comando:

    mv app webapp
    

    Al cambiar el nombre del directorio app, se simula que no todos los directorios de los que habrá que realizar una copia de seguridad se denominarán app.

    Ya no puede confiar en el valor predeterminado de $Path. Deberá proporcionar un valor mediante la consola al ejecutar el script.

  4. Quite el archivo de copia de seguridad y reemplace <current date as YYYY-MM-DD> por la fecha actual:

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

    Va a quitar este archivo para asegurarse de que recibe un mensaje en el que se indica que el valor $Path no existe. De lo contrario, recibiría un mensaje en el que se indicaría que el archivo ZIP ya existe y el problema que intentamos corregir quedaría oculto.

  5. Ejecute el script sin proporcionar parámetros. (El script usará los valores predeterminados para los parámetros).

    ./Backup.ps1
    

    Verá un mensaje de error similar al siguiente:

    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
    

    El script le notifica que no encuentra el directorio ./app. Ahora, cuando proporcione un valor al parámetro $Path, verá la ventaja que supone agregar parámetros al script.

  6. Ejecute el script para probarlo:

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

    Verá un mensaje similar al que recibió anteriormente:

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

    Ahora puede usar parámetros si el directorio del que quiere realizar la copia de seguridad no se denomina ./app o si quiere colocar el archivo comprimido en un lugar diferente al directorio actual.

¡Enhorabuena! Ha creado un script de copia de seguridad que puede usar siempre que quiera crear una copia de seguridad de un directorio de aplicación o cualquier otro directorio importante. Después, ha identificado partes del script que podría ser necesario cambiar con frecuencia y ha reemplazado los valores estáticos por valores de parámetro. De este modo, lo más probable es que no tenga que cambiar el propio script cuando cambien sus requisitos (por ejemplo, si el nombre de la aplicación cambia o si tiene que cambiar la ruta de acceso de destino).