

# 定义采用 PowerShell 的 Lambda 函数处理程序
<a name="powershell-handler"></a>

当调用 Lambda 函数时，Lambda 处理程序会调用 PowerShell 脚本。

调用 PowerShell 脚本时，以下变量已预定义：
+  *\$1LambdaInput* – 包含处理程序输入的 PSObject。该输入可以是事件数据（由事件源发布）或您提供的自定义输入（如字符串或任意自定义数据对象）。
+  *\$1LambdaContext* – 一个 Amazon.Lambda.Core.ILambdaContext 对象，用于访问有关当前调用的信息（例如当前函数的名称、内存限制、剩余执行时间和日志记录）。

例如，请考虑以下 PowerShell 示例代码。

```
#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
Write-Host 'Function Name:' $LambdaContext.FunctionName
```

此脚本返回从 \$1LambdaContext 变量获得的 FunctionName 属性。

**注意**  
您需要使用 PowerShell 脚本中的 `#Requires` 语句指示您的脚本所依赖的模块。此语句可执行两个重要任务。1) 它可告知其他开发人员该脚本使用的模块，2) 它可标识 AWS PowerShell 工具在部署过程中使用脚本打包所需要的从属模块。有关 PowerShell 中的 `#Requires` 语句的更多信息，请参阅[关于 Requires](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_requires?view=powershell-6)。有关 PowerShell 部署程序包的更多信息，请参阅[使用 .zip 文件归档部署 PowerShell Lambda 函数](powershell-package.md)。  
当您的 PowerShell Lambda 函数使用 AWS PowerShell cmdlet 时，请务必设置一个 `#Requires` 语句，使其引用 `AWSPowerShell.NetCore` 模块，该模块支持 PowerShell Core，而不是 `AWSPowerShell` 模块，该模块仅支持 Windows PowerShell。此外，请确保使用 3.3.270.0 版或更新版本的 `AWSPowerShell.NetCore`，其优化了 cmdlet 导入过程。如果使用较旧版本，冷启动时间较长。有关更多信息，请参阅 [AWS Tools for PowerShell](https://aws.amazon.com/powershell/?track=sdk)。

## 返回数据
<a name="powershell-handler-output"></a>

有些 Lambda 调用旨在为调用方返回数据。例如，如果某个调用是为了响应来自 API Gateway 的 Web 请求，则我们的 Lambda 函数需要返回响应。对于 PowerShell Lambda，添加到 PowerShell 管道的最后一个对象是 Lambda 调用返回的数据。如果对象是字符串，数据将按原样返回。否则，对象将使用 `ConvertTo-Json` cmdlet 转换为 JSON。

例如，请考虑以下 PowerShell 语句，该语句在 PowerShell 管道中添加 `$PSVersionTable`：

```
$PSVersionTable
```

PowerShell 脚本完成后，PowerShell 管道中的最后一个对象是 Lambda 函数的返回数据。`$PSVersionTable` 是 PowerShell 全局变量，还提供有关正在运行的环境的信息。