我编写了一个 Powershell 脚本来初始化、格式化、为连接到 Windows 2019 EC2 实例的多个 EBS 卷分配驱动器号等。
<powershell>
New-Item C:\windows_initialization.log -type file -force
$log = "C:\windows_initialization.log"
Add-Content $log "Downloading aws cli"
Write-Output "Installing AWS Command Line Interface tools"
msiexec.exe /i "https://awscli.amazonaws.com/AWSCLIV2.msi"
Start-Sleep -s 60
$env:Path +=";C:\Program Files\Amazon\awscliv2"
$profile_drive = aws ec2 describe-volumes --filters Name=attachment.device,Values="xvdf" Name=attachment.instance-id,Values=$(Invoke-WebRequest -Uri "http://169.254.169.254/latest/meta-data/instance-id" -usebasicparsing) --output text --query 'Volumes[*].[VolumeId]'
Start-Sleep -s 5
Get-Disk | where SerialNumber -match "$profile_drive".Trim("vol-") | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -DriveLetter D -UseMaximumSize | Format-Volume -Filesystem NTFS -Confirm:$false
Set-Volume -DriveLetter D -NewFileSystemLabel "Profiles"
$data_drive = aws ec2 describe-volumes --filters Name=attachment.device,Values="xvdg" Name=attachment.instance-id,Values=$(Invoke-WebRequest -Uri "http://169.254.169.254/latest/meta-data/instance-id" -usebasicparsing) --output text --query 'Volumes[*].[VolumeId]'
Start-Sleep -s 5
Get-Disk | where SerialNumber -match "$data_drive".Trim("vol-") | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -DriveLetter E -UseMaximumSize | Format-Volume -Filesystem NTFS -Confirm:$false
Set-Volume -DriveLetter E -NewFileSystemLabel "Data"
</powershell>
<persist>true</persist>
我以为它工作正常,直到我使用 SSM 连接到我的实例。由于变量未填充,驱动器初始化不起作用。我显然错过了一些东西,但我一时想不出是什么,需要帮助。
当连接到实例时,我可以$profile_drive
手动运行该命令,它会创建一个变量并用所需的volume_id填充它。
有任何想法吗?
答案1
我实际上重新审视了这一点,并使用了 Powershell 命令
New-Variable -Name profile_drive -Value (aws ec2 describe-volumes --filters Name=attachment.device,Values="xvdf" Name=attachment.instance-id,Values=$(Invoke-WebRequest -Uri "http://169.254.169.254/latest/meta-data/instance-id" -usebasicparsing) --output text --query 'Volumes[*].[VolumeId]')