我正在運行以下一段代碼,以從我所有訂閱的所有存盤帳戶中獲取存盤帳戶 TLS 版本。目前唯一的問題是我無法將結果匯出到 CSV,因此我可以轉發結果。向代碼添加什么,以便將存盤帳戶名稱、資源組、訂閱和 TSL 版本保存到一行但在不同的列中?
[PsObject[]]$data = @()
#$Subscriptions = Get-AzSubscription
#foreach ($sub in $Subscriptions) {
#Get-AzSubscription -SubscriptionName $sub.Name | Set-AzContext
$storageaccounts = Get-AzStorageAccount
$storageaccounts| ForEach-Object {
Write-Host Checking $_.StorageAccountName
$tls = (Get-AzStorageAccount -ResourceGroupName $_.ResourceGroupName -Name $_.StorageAccountName).MinimumTlsVersion
# create a custom object to store the information about a storage account
$tlsVersionData = [PsObject]@{
"StorageAccountName" = $_.StorageAccountName
"ResourceGroupName" = $_.ResourceGroupName
"TLSVersion" = $tls
}
# add that custom object to the array
$data = $tlsVersionData
}
#}
# write a CSV file containing this data
$data | Export-Csv C:\temp\data.csv
寫入主機向螢屏顯示有關存盤帳戶的正確資訊,但我有點不知道如何將資料保存到 cvs。
uj5u.com熱心網友回復:
請嘗試以下操作:
[PsObject[]]$data = @() #define an array that will hold the data
$Subscriptions = Get-AzSubscription
foreach ($sub in $Subscriptions) {
Get-AzSubscription -SubscriptionName $sub.Name | Set-AzContext
$storageaccounts = Get-AzStorageAccount
$storageaccounts| ForEach-Object {
Write-Host Checking $_.StorageAccountName
$tls = (Get-AzStorageAccount -ResourceGroupName $_.ResourceGroupName -Name $_.StorageAccountName).MinimumTlsVersion
# create a custom object to store the information about a storage account
$tlsVersionData = [PsObject]@{
"StorageAccountName" = $_.StorageAccountName
"ResourceGroupName" = $_.ResourceGroupName
"TLSVersion" = $tls
}
# add that custom object to the array
$data = $tlsVersionData
}
}
# write a CSV file containing this data
$data | Export-Csv .\data.csv
uj5u.com熱心網友回復:
盡量避免使用加法向陣列(具有靜態長度)添加元素 =。
這樣做會浪費時間和記憶體,因為對于添加到其中的每個專案,都需要在記憶體中重建整個陣列。
修復方法是讓 PowerShell 為您收集資料,如下所示。
至于輸出到Csv,-NoTypeInformation在Export-Csv cmdlet中添加switch ,這樣它就不會在頂部寫入欄位型別資訊。
$Subscriptions = Get-AzSubscription
$data = foreach ($sub in $Subscriptions) {
# suppress output on this line
$null = Get-AzSubscription -SubscriptionName $sub.Name | Set-AzContext
Get-AzStorageAccount | ForEach-Object {
Write-Host Checking $_.StorageAccountName
$tls = (Get-AzStorageAccount -ResourceGroupName $_.ResourceGroupName -Name $_.StorageAccountName).MinimumTlsVersion
# create and output a custom object to store the information about a storage account
[PsCustomObject]@{
StorageAccountName = $_.StorageAccountName
ResourceGroupName = $_.ResourceGroupName
TLSVersion = $tls
}
}
}
# write a CSV file containing this data
$data | Export-Csv -Path .\data.csv -NoTypeInformation
注意:Export-Csv默認情況下使用逗號作為欄位分隔符。如果需要不同的字符,可以使用-Delimiter引數指定。
事實上,您可以在沒有 ForEach-Object 回圈的情況下撰寫上述內容,如下所示:
$Subscriptions = Get-AzSubscription
$data = foreach ($sub in $Subscriptions) {
# suppress output on this line
$null = Get-AzSubscription -SubscriptionName $sub.Name | Set-AzContext
# let Select-Object output the objects that will be collected in variable $data
Get-AzStorageAccount | Select-Object StorageAccountName, ResourceGroupName,
@{Name = 'TLSVersion'; Expression = {$_.MinimumTlsVersion}}
}
# write a CSV file containing this data
$data | Export-Csv -Path .\data.csv -NoTypeInformation
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/402169.html
