PowerShell脚本快速在blob中搜索文件

网友投稿 277 2022-09-29

PowerShell脚本快速在blob中搜索文件

很多时候blob中放的文件会很杂很乱,时间越长越是如此,有时候想找个文件还挺麻烦的,portal上倒是有搜索的功能,不过说真的不知道为啥感觉不是特别好使,所以自己稍微花点时间写了个PowerShell的脚本,可以用来在storage account内按照关键字搜索自己需要的文件

废话不说太多,早点上脚本内容

param ( #filename to be filterd [parameter(Mandatory = $true)] [string]$filename, [parameter(Mandatory = $false)] [string]$StorageAccount )function Write-DateTimeMessage { param ( [parameter(Mandatory = $false)] [switch]$Warning, [parameter(Mandatory = $true)] [string]$Message, [parameter(Mandatory = $false)] [string]$ForegroundColor ) if ($Warning) { Write-Warning ($(Get-Date -UFormat '%Y/%m/%d %H:%M:%S') + " * " + $Message) } else { if ($ForegroundColor) { Write-Host ($(Get-Date -UFormat '%Y/%m/%d %H:%M:%S') + " * " + $Message) -ForegroundColor $ForegroundColor } else { Write-Host ($(Get-Date -UFormat '%Y/%m/%d %H:%M:%S') + " * " + $Message) } } }function Display-InBytes($num) { $suffix = "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" $index = 0 while ($num -gt 1kb) { $num = $num / 1kb $index++ } $value = "{0:N2} {1}" -f $num, $suffix[$index] return $value }function Find-FileWithinStorageAccount { param ( [parameter(Mandatory = $true)] $Storage, [parameter(Mandatory = $true)] $SubscriptionName, [parameter(Mandatory = $true)] $SubscriptionID, [parameter(Mandatory = $true)] [string]$filename ) [pscustomobject[]]$TempStorageObjects = $null $StorageAccountName = $Storage.StorageAccountName Write-DateTimeMessage -Message "Checking storage $StorageAccountName" $StorageContainers = Get-AzStorageContainer -Context $Storage.Context if ($null -eq $StorageContainers) { Write-DateTimeMessage -Message "Didn't find any container in storage account $StorageAccountName" -Warning } else { foreach ($StorageContainer in $StorageContainers) { if ($StorageContainer.Name -in $IgnoreLists) { Write-DateTimeMessage "Azure system log container, ignore, $($StorageContainer.Name)" } else { $Blobs = Get-AzStorageBlob -Container $StorageContainer.Name -Context $Storage.Context foreach ($Blob in $Blobs) { if ($Blob.Name -like "*$filename*") { $CreateTime = $Blob.ICloudBlob.Properties.Created.LocalDateTime $size = Display-InBytes -num $Blob.Length $StorageObject = New-Object -TypeName psobject $StorageObject | Add-Member -MemberType NoteProperty -Name SubscriptionName -Value $SubscriptionName $StorageObject | Add-Member -MemberType NoteProperty -Name SubscriptionID -Value $SubscriptionID $StorageObject | Add-Member -MemberType NoteProperty -Name StorageAccountName -Value $StorageAccountName $StorageObject | Add-Member -MemberType NoteProperty -Name ResourceGroupName -Value $Storage.ResourceGroupName $StorageObject | Add-Member -MemberType NoteProperty -Name Location -Value $Storage.Location $StorageObject | Add-Member -MemberType NoteProperty -Name Container -Value $StorageContainer.Name $StorageObject | Add-Member -MemberType NoteProperty -Name BlobName -Value $Blob.Name $StorageObject | Add-Member -MemberType NoteProperty -Name BlobType -Value $Blob.BlobType $StorageObject | Add-Member -MemberType NoteProperty -Name Size -Value $size $StorageObject | Add-Member -MemberType NoteProperty -Name IsDeleted -Value $Blob.IsDeleted $StorageObject | Add-Member -MemberType NoteProperty -Name LeaseState -Value $Blob.ICloudBlob.Properties.LeaseState $StorageObject | Add-Member -MemberType NoteProperty -Name CreatedTime -Value $CreateTime $TempStorageObjects += $StorageObject Write-DateTimeMessage "blob $($Blob.Name) found in container $($StorageContainer.Name), storage $($StorageAccountName), size: $size" } } } } return $TempStorageObjects } }[pscustomobject[]]$StorageObjects = $nullif ($StorageAccount) { # specific storage account Write-DateTimeMessage "Storage account specified in parameter, will not walk through all storage accounts" $Storage = Get-AzStorageAccount | ? { $_.StorageAccountName -eq $StorageAccount } if ($null -eq $Storage) { Write-DateTimeMessage "Storage account specified not exist" exit } else { # storage account exist $CurrentContext = Get-AzContext $SubscriptionName = $CurrentContext.Subscription.Name $SubscriptionID = $CurrentContext.Subscription.Id $ReturnObjects = Find-FileWithinStorageAccount -Storage $Storage -filename $filename -SubscriptionName $SubscriptionName -SubscriptionID $SubscriptionID if ($null -ne $ReturnObjects) { $StorageObjects += $ReturnObjects } }}$OutputPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ("AzStorageFile" + $(Get-Date -Format "yyyyMMdd-HHmmss") + ".csv")if ($null -ne $StorageObjects) { $StorageObjects | Export-Csv -NoTypeInformation -LiteralPath $OutputPath Write-DateTimeMessage -Message "Please check $OutputPath" -Warning}else { Write-DateTimeMessage "Didn't get information, please check" -warning }

现在还是在单独的storage account内搜索,其实完全可以扩展到跨storage account甚至跨订阅搜索,不过暂时还没搞,有需要的时候再弄个

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:深入理解百度在离线混部技术
下一篇:Java详细分析讲解HashMap
相关文章

 发表评论

暂时没有评论,来抢沙发吧~