Azure虚拟机创建时使用自定义脚本扩展修改驱动器号执行报错问题
Azure虚拟机创建时使用自定义脚本扩展修改驱动器号执行报错问题
我最近碰到个头疼的问题:在Azure虚拟机里手动运行下面这段PowerShell脚本时,一切都正常,能顺利完成页面文件删除、驱动器号修改和重新配置页面文件的操作:
gwmi win32_pagefilesetting $pf=gwmi win32_pagefilesetting $pf.Delete() Restart-Computer –Force Get-Partition -DriveLetter "D" | Set-Partition -NewDriveLetter "T" $TempDriveLetter = "T" $TempDriveLetter = $TempDriveLetter + ":" $drive = Get-WmiObject -Class win32_volume -Filter “DriveLetter = '$TempDriveLetter'” #re-enable page file on new Drive $drive = Get-WmiObject -Class win32_volume -Filter “DriveLetter = '$TempDriveLetter'” Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{ Name = "$TempDriveLetter\pagefile.sys"; MaximumSize = 0; } Restart-Computer -Force
可一旦把这个脚本通过自定义脚本扩展来执行,就会报错(有对应的错误截图)。
后来我琢磨了下,大概率是因为自定义脚本扩展的执行逻辑问题:脚本里有两次Restart-Computer命令,而自定义脚本扩展默认不会在虚拟机重启后自动继续执行剩下的脚本内容。第一次重启后,后续修改驱动器号、配置新页面文件的步骤根本没机会运行,自然就会出问题。
给你几个可行的解决思路:
- 拆分脚本为两个阶段:
- 第一阶段脚本:只执行删除页面文件、触发第一次重启的操作,通过自定义脚本扩展执行。
- 第二阶段脚本:配置驱动器号、重新设置页面文件、触发第二次重启,把这个脚本设置为虚拟机的RunOnce任务,让虚拟机在第一次重启后自动执行这部分内容。
- 调整脚本逻辑,减少中途重启:尝试把需要重启的操作合并,或者查找是否有无需重启就能修改驱动器号的方案(不过修改驱动器号通常还是需要重启才能生效)。
- 检查执行权限差异:自定义脚本扩展是用系统账户执行的,和手动登录的用户账户权限虽都很高,但可以排查下是否有某些WMI操作在系统账户上下文里存在特殊限制。
备注:内容来源于stack exchange,提问作者mysanj
相关产品推荐
相关产品推荐

