1

我有以下代码,它获取 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!"
    }
}
4

1 回答 1

2

未经测试:

(Get-AzStorageBlob -Blob "*$blobName*" -Container $containerName -Context $ctx).
  ICloudBlob.Properties.$blobPropertyName
  • Get-AzStorageBlob-Blob参数接受通配符表达式,因此您不必手动遍历所有 blob 来查找感兴趣的 blob。

  • "*$blobName*"请注意,如果通配符匹配多个blob,该命令也可以工作,因为 PowerShell 从 v3 开始,具有称为成员枚举的功能,它能够访问集合上的成员(属性或方法)并将其隐式应用于每个它的元素结果被收集到一个数组中。

  • 只要关闭(默认情况下)或设置为Set-StrictMode最高,如果不存在匹配的 blob 或匹配的 blob 没有目标属性,则上述内容将简单地返回。-Version 1$null

于 2020-09-08T14:22:45.287 回答