

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 定義以 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` 陳述式的詳細資訊，請參閱[關於需求](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` 陳述式，它參考支援 PowerShell Core 的 `AWSPowerShell.NetCore` 模組，而非參考僅支援 Windows PowerShell 的 `AWSPowerShell` 模組。此外，請務必使用版本 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 陳述式，它將 `$PSVersionTable` 新增至 PowerShell 管道：

```
$PSVersionTable
```

在 PowerShell 指令碼完成之後，PowerShell 管道中的最後一個物件即為 Lambda 函數的傳回資料。`$PSVersionTable` 是 PowerShell 全域變數，它也提供有關執行環境的資訊。