azure - 一次为所有虚拟机分配标签
问题描述
我想为 Azure 中每个资源组中的所有 VM 添加相同的标记值。
我已经准备了一个脚本,但是 PS 不想继续这个,因为对象到字符串的转换。
$VMs = Get-AzureRmVM
$VMs | Foreach-Object {
$t = Get-AzureRmResource -ResourceName $VMs.Name -ResourceGroupName $VMs.ResourceGroupName
Set-AzureRmResource -Tag @{ Funding="..."} -ResourceId $t.ResourceId -Force
}
但是,当它要求一个字符串时,当解析为循环的对象必须清楚地是对象时,我怎么能做循环呢?我是否被迫在 txt 文件中准备外部列表并将那里的值解析为字符串?
解决方案
在ForEach-Object
循环内部,您应该使用自动变量$_
来定位该特定对象。现在您将数组发送到Get-AzureRmResource
cmdlet:
$VMs = Get-AzureRmVM
$VMs | Foreach-Object {
$t = Get-AzureRmResource -ResourceName $_.Name -ResourceGroupName $_.ResourceGroupName
Set-AzureRmResource -Tag @{ Funding="..."} -ResourceId $t.ResourceId -Force
}
假设您从三个虚拟机返回$VMs = Get-AzureRmVM
(我在这里使用 [PSCustomObject] 对象数组伪造了它)
$VMs = @(
[PSCustomObject]@{Name = 'VM1'; ResourceGroupName = 'VM1_Resource'},
[PSCustomObject]@{Name = 'VM2'; ResourceGroupName = 'VM2_Resource'}
[PSCustomObject]@{Name = 'VM3'; ResourceGroupName = 'VM3_Resource'}
)
然后$VMs.Name
在 (Object[])数组中执行结果 'VM1','VM2','VM3'
并在数组中执行$VMs.ResourceGroupName
结果 'VM1_Resource','VM2_Resource','VM3_Resource'
然而,在循环内部,变量$_
只代表这些虚拟机中的一个,因此第一次迭代$_.Name
是一个字符串 "VM1"
等。
希望能解释你的对象到字符串转换的东西。
推荐阅读
- java - java - 如何从java中的方法返回和调用动态一维数组?(我的代码中缺少什么)?
- python - 当日期丢失时,散景消除数据时间轴中的间隙
- mysql - mysql)如果表存在则选择值
- android - 为什么我们必须在片段中的私有变量之后添加 get() 以进行视图绑定?
- c# - C# Blazor 在 URL 中指定字符串参数
- git - 我们可以使用 rm -rf 恢复已删除的提交吗?
- python - 使用多个矩阵在 Python 中使用 Keras 预测矩阵
- node.js - 使用 repository.clear() 通过 ManyToOne 清除两个表
- c - 如何实现两个 C 程序使用的全局 POSIX 信号量?
- python - Tensorflow 2.0 DQN action_spec 屏蔽