[英]Running UserData with Powershell >= 7.0 on Windows Server 2022 on EC2
默認情況下,UserData 將在啟動的 AWS EC2 實例上的 Windows Server 2022 AMI 上使用 Powershell V5.1 運行。 但是,我想使用一些僅在 Powershell 版本 7 及更高版本中受支持的 cmdlet。
使用 UserData 啟動實例時,我如何才能最好地使用 Powershell 7+ 運行腳本?
我目前有一個安裝 powershell 7 的腳本,但從那時起我不確定如何使用 v7 來運行我擁有的命令 rest。
Invoke-WebRequest -Uri https://github.com/PowerShell/PowerShell/releases/download/v7.3.1/PowerShell-7.3.1-win-x64.msi -OutFile PowerShell.msi
Start-Process msiexec.exe -ArgumentList '/i PowerShell.msi /quiet' -Wait
我正在使用 WINDOWS_SERVER_2022_ENGLISH_FULL_BASE AMI。
我試過使用類似Invoke-Expression
東西,也試過讓腳本用一些條件遞歸地調用自己,例如
# First Run with ps 5.1
if ($PSVersionTable.PSVersion -lt [Version]"7.0") {
Invoke-WebRequest -Uri https://github.com/PowerShell/PowerShell/releases/download/v7.3.1/PowerShell-7.3.1-win-x64.msi -OutFile PowerShell.msi
Start-Process msiexec.exe -ArgumentList '/i PowerShell.msi /quiet' -Wait
cd "C:\Program Files\PowerShell\7"
# Run this same script with ps7
./pwsh $PSCommandPath
exit
}
#
if ($PSVersionTable.PSVersion -gt [Version]"7.0") {
# Do the things I need to do with ps7...
}
我的兩次嘗試都默默地失敗了,並且使用 ec2 userdata 很難獲得有關原因的信息。
最終奏效的方法是使用 2 個不同的腳本。 第一個腳本安裝 PS7,然后從 S3 下載第二個腳本並使用 PS7 執行。
使用 PS5 執行的用戶數據:
#init.ps1
<powershell>
Invoke-WebRequest -Uri https://github.com/PowerShell/PowerShell/releases/download/v7.3.1/PowerShell-7.3.1-win-x64.msi -OutFile PowerShell.msi
Start-Process msiexec.exe -ArgumentList '/i PowerShell.msi /quiet' -Wait
cd "C:\Program Files\PowerShell\7"
mkdir (Split-Path -Path 'C:/temp/setupGateway.ps1' ) -ea 0
Read-S3Object -BucketName 'my-bucket' -key 'setupGateway.ps1' -file 'C:/temp/setupGateway.ps1' -ErrorAction Stop
& "C:\Program Files\PowerShell\7\pwsh" "C:\temp\setupGateway.ps1"
</powershell>
<persist>true</persist>
PS7腳本,單獨執行:
# setup.ps1
Write-Output $PSVersionTable
Write-Output "Hello from PS7"
要使這項工作正常進行,只需確保將setup.ps1
腳本復制到 S3 位置。 這可以通過多種不同的方式實現,具體取決於您設置的 rest。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.