如何在PowerShell中按名称筛选Azure磁盘资源用于Azure DevOps流水线
解决方案
问题原因
原有写法失效是因为PowerShell会将$list数组整体转换为空格分隔的字符串进行匹配,无法遍历匹配列表中的每一个规则。
最优实现方案(无需预定义长列表)
你的磁盘命名规则非常明确,直接用正则匹配即可覆盖所有disk1/disk-1/disk_1到disk8/disk-8/disk_8的格式,代码更简洁:
# 正则说明:disk匹配固定前缀,[-_]?匹配0或1个横杠/下划线,[1-8]匹配1-8的数字 Get-AzDisk | Where-Object { $_.Name -match 'disk[-_]?[1-8]' }
自定义匹配列表的实现方案
如果后续需要自定义非连续的匹配规则,也可以按如下方式实现:
# 生成匹配规则列表,也可以手动赋值自定义规则 $matchPatterns = 1..8 | ForEach-Object { "disk-$_", "disk_$_", "disk$_" } # 遍历匹配每一条规则 Get-AzDisk | Where-Object { $diskName = $_.Name $matchPatterns.Where({ $diskName -like "*$_*" }, 'First').Count -gt 0 }
Azure DevOps流水线适配注意事项
- 请使用Azure PowerShell任务运行该脚本,任务会自动注入你配置的Azure服务连接权限,无需额外写登录代码
- 如使用Linux/MacOS代理的PowerShell Core,上述语法完全兼容,无需修改
- 可添加调试输出方便流水线运行后排查结果:
$matchedDisks = Get-AzDisk | Where-Object { $_.Name -match 'disk[-_]?[1-8]' } $matchedDisks | Select-Object Name, ResourceGroupName, DiskSizeGB | Format-Table | Out-String | Write-Host
内容的提问来源于stack exchange,提问作者Norrin Rad
相关产品推荐
相关产品推荐

