默认情况下,UserData将在Windows Server 2022 AMI上的启动AWS EC2示例上与Powershell V5.1一起运行。但是,我想使用仅在Powershell版本7和更高版本中支持的一些cmdlet。
在使用UserData引导示例时,如何才能最好地使用Powershell 7+运行脚本?
我目前有一个安装powershell7的脚本,但从那时起,我不确定如何使用v7来运行我所拥有的其余命令。
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服务器2022英语版完整版基础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,很难得到原因的信息。
1条答案
按热度按时间rryofs0p1#
最终成功的方法是有两个不同的脚本,第一个脚本安装PS7,然后从S3下载第二个脚本并使用PS7执行它。
使用PS5执行的用户数据:
PS7脚本,单独执行:
要完成这项工作,需要做的就是确保将
setup.ps1
脚本复制到S3位置,这可以通过许多不同的方式来实现,具体取决于其余的设置。