

# Implementar funciones Lambda de PowerShell con archivos .zip
<a name="powershell-package"></a>

Un paquete de implementación para el tiempo de ejecución de PowerShell contiene su script de PowerShell, los módulos de PowerShell necesarios para su script de PowerShell y los ensamblados necesarios para alojar PowerShell Core.

## Creación de la función de Lambda
<a name="powershell-package-create"></a>

Para que le resulte más fácil empezar a escribir e invocar un script de PowerShell con Lambda, puede utilizar el cmdlet `New-AWSPowerShellLambda` para crear un script de inicio basado en una plantilla. Puede utilizar el cmdlet `Publish-AWSPowerShellLambda` para implementar su script en Lambda. A continuación, puede probar el script ya sea a través de la línea de comandos o de la consola de Lambda.

Para crear un nuevo script de PowerShell, cargarlo y probarlo, haga lo siguiente:

1. Para ver la lista de plantillas disponibles, ejecute el siguiente comando:

   ```
   PS C:\> Get-AWSPowerShellLambdaTemplate
   
   Template               Description
   --------               -----------
   Basic                  Bare bones script
   CodeCommitTrigger      Script to process AWS CodeCommit Triggers
   ...
   ```

1. Para crear un script de ejemplo basado en la plantilla`Basic`, ejecute el siguiente comando:

   ```
   New-AWSPowerShellLambda -ScriptName MyFirstPSScript -Template Basic
   ```

   Se creará un nuevo archivo denominado `MyFirstPSScript.ps1` en un nuevo subdirectorio del directorio actual. El nombre del directorio se basa en el parámetro `-ScriptName`. Puede utilizar el parámetro `-Directory` para elegir otro directorio.

   Puede ver que el nuevo archivo tiene el siguiente contenido:

   ```
   # PowerShell script file to run as a Lambda function
   # 
   # When executing in Lambda the following variables are predefined.
   #   $LambdaInput - A PSObject that contains the Lambda function input data.
   #   $LambdaContext - An Amazon.Lambda.Core.ILambdaContext object that contains information about the currently running Lambda environment.
   #
   # The last item in the PowerShell pipeline is returned as the result of the Lambda function.
   #
   # To include PowerShell modules with your Lambda function, like the AWSPowerShell.NetCore module, add a "#Requires" statement 
   # indicating the module and version.
                   
   #Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
   
   # Uncomment to send the input to CloudWatch Logs
   # Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
   ```

1. Para ver cómo se envían los mensajes de registro desde su script de PowerShell a Amazon CloudWatch Logs, anule el comentario de la línea `Write-Host` del script de muestra.

   Para demostrar cómo puede devolver los datos de sus funciones de Lambda, agregue una nueva línea al final del script con `$PSVersionTable`. Esto agregará `$PSVersionTable` a la canalización de PowerShell. Una vez que el script de PowerShell se ha completado, el último objeto en la canalización de PowerShell son los datos de devolución de la función de Lambda. `$PSVersionTable` es una variable global de PowerShell que también proporciona información sobre el entorno en ejecución.

   Después de realizar estos cambios, las dos últimas líneas del script de muestra tienen un aspecto similar al siguiente:

   ```
   Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
   $PSVersionTable
   ```

1. Después de editar el archivo `MyFirstPSScript.ps1`, cambie el directorio a la ubicación del script. Después, ejecute el siguiente comando para publicar el script en Lambda:

   ```
   Publish-AWSPowerShellLambda -ScriptPath .\MyFirstPSScript.ps1 -Name  MyFirstPSScript -Region us-east-2
   ```

   Tenga en cuenta que el parámetro `-Name` especifica el nombre de la función de , que aparece en la consola de Lambda. Puede utilizar esta función para invocar manualmente a su script.

1. Invoque su función con el comando `invoke` AWS Command Line Interface (AWS CLI).

   ```
   > aws lambda invoke --function-name MyFirstPSScript out
   ```