问题描述
我有以下代码,该代码获取blob的属性的集合,然后使用foreach循环定位选定的属性值。是否有一个吸引人的东西,不涉及遍历PowerShell 7中的集合
$Blobs = Get-AzStorageBlob -Container $containerName -Context $ctx
ForEach ($Blob in $Blobs){
if($Blob.Name.IndexOf($blobName) -ge 0)
{
if (Get-Member -InputObject $Blob.ICloudBlob.Properties -Name $blobPropertyName -MemberType Property) {
$retValue = $Blob.ICloudBlob.Properties.$blobPropertyName
break;
}
} else{
Write-Host "Blob not found!"
}
}
解决方法
未经测试:
(Get-AzStorageBlob -Blob "*$blobName*" -Container $containerName -Context $ctx).
ICloudBlob.Properties.$blobPropertyName
-
Get-AzStorageBlob
的-Blob
参数接受wildcard expression,因此您不必手动遍历所有Blob即可找到感兴趣的一个。 >
-
请注意,如果通配符
"*$blobName*"
与多个 blob匹配,该命令也将起作用,因为PowerShell自v3起具有称为member enumeration的功能,该功能可以访问集合上的成员(属性或方法)并将其隐式应用于每个元素,并且结果被收集到数组中。 -
只要
Set-StrictMode
处于 off (默认情况下)或设置为最高的-Version 1
,以上内容将简单地返回$null
要么不存在匹配的Blob,要么匹配的Blob没有目标属性。