Azure资源使用PowerShell自动标记创建者和创建日期

toiithl6  于 9个月前  发布在  Shell
关注(0)|答案(1)|浏览(79)

如何自动添加标签:CreatedBy和createdDate
我想做的是
我们的想法是创建一个预定的Runbook。它将每10分钟运行一次。这将获取所有未标记的资源,并将“CreatedBy”和“CreatedDate”标记应用于订阅中的所有资源。
我依赖于
第一个月
这就是我所做的。

$Appid = "Appid"
$PSWord = ConvertTo-SecureString -String "APPSecret" -AsPlainText -Force
$tenantID = "tenantID"
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Appid,$PSWord
Connect-AzAccount -Credential $Credential -Tenant   $tenantID -ServicePrincipal -Subscription "SubID"
Set-AzContext -Tenant $tenantID
$resources = Get-AzResource

$currentTime = Get-Date
$endTime = $currentTime.AddDays(-7 * $cnt)
$startTime = $endTime.AddDays(-7)

$resources.foreach{
    $resource = $_
    $untaggedResources = $resource.Tags["createdBy","createdTime"]
    if($untaggedResources -eq $null)
    {
        $creationTime = (Get-AzResourceGroup -Name $resource.ResourceGroupName).Resources |
                        Where-Object { $_.ResourceId -eq $resource.ResourceId } |
                        Select-Object -ExpandProperty Properties |
                        Select-Object -ExpandProperty CreatedTime

        $owner = Get-AzLog -ResourceId $resource.ResourceId -StartTime $startTime -EndTime $endTime |
                 Where-Object {$_.Authorization.Action -like "*/write*"} |
                 Select-Object -ExpandProperty Caller |
                 Group-Object |
                 Sort-Object |
                 Select-Object -ExpandProperty Name

        $resource.Tags.Add("createdBy", $owner)
        $resource.Tags.Add("createdTime", $creationTime)
        $resource | Set-AzResource -Force
    }
}

字符串
我已经使用这个脚本创建了一个Runbook,脚本完成时没有任何错误。但是它没有按预期工作。
首先,它会在资源中更新createdTime。它会添加标记名为createdTime,但值只是显示为空白。
其次,createdBy正在更新,但是沿着用户电子邮件,它在字段中添加了额外的ID。


的数据
有没有可能的方法来实现这一点。

nnt7mjpx

nnt7mjpx1#

当我在我的环境中尝试相同的代码时,我总是收到$owner$Creationtime结果为空。这意味着这些变量不包含与资源相关的信息。
为了解决这个问题,请使用-ExpandPropertiesGet-AzResource命令,详细说明如下。
首先,要使用PowerShell获取CreatedTime,请使用:用途:

$resources=(Get-Azresource -ExpandProperties).Properties

字符串


的数据

  • 修改代码以满足您的要求。*
$resources = Get-Azresource
foreach ($resource in $resources) {
      $tags = $resource.Tags
  if (-not $tags.ContainsKey("createdBy") -and -not $tags.ContainsKey("createdTime")) {          
          $property = (Get-Azresource -ExpandProperties).Properties 
  $CreatedTime = $property.CreationTime
  
          $endTime = (Get-Date).AddDays(-7)
          $startTime = $endTime.AddDays(-7)
  $owner = Get-AzLog -ResourceId $resource.ResourceId -StartTime $startTime -EndTime $endTime |
                   Where-Object { $_.Authorization.Action -like "*/write*" } |
                   Select-Object -ExpandProperty Caller |
                   Group-Object |
                   Sort-Object |
                   Select-Object -ExpandProperty Name
 
 $modifiedTags = @{
             "createdBy" = $owner
             "creationTime" = $CreatedTime
         }
  
         $resource | Set-AzResource -Tag $modifiedTags -Force
      }
  }

相关问题