gpt4 book ai didi

azure - 优化 PowerShell 代码以避免在计算属性内多次调用 cmdlet?

转载 作者:行者123 更新时间:2023-12-02 07:34:48 24 4
gpt4 key购买 nike

我希望优化下面的代码,以避免在计算属性下调用同一命令两次。

https://learn.microsoft.com/en-us/powershell/module/az.compute/get-azvm

https://learn.microsoft.com/en-us/powershell/module/az.compute/get-azvmsize

Get-AzVM | Select-Object-Object Name,
@{ l = 'osdiskingb'; e = { ($_.StorageProfile.OsDisk.DiskSizeGB) } }, `
@{ l = 'memory'; e = { $size = $_.HardwareProfile.VmSize; Get-AzVMSize -vmname $_.Name -ResourceGroupName $_.ResourceGroupName | Where-Object { $_.name -eq $size } | Select-Object -expand MemoryInMB } }, `
@{ l = 'cpu'; e = { $size = $_.HardwareProfile.VmSize; Get-AzVMSize -vmname $_.Name -ResourceGroupName $_.ResourceGroupName | Where-Object { $_.name -eq $size } | Select-Object -expand NumberOfCores } }, `
@{ l = 'nic'; e = { $_.NetworkProfile.NetworkInterfaces.id.split('/') | Select-Object -Last 1 } }, `
@{ l = 'ip'; e = { $nic = $_.NetworkProfile.NetworkInterfaces.id.split('/') | Select-Object -Last 1; Get-AzNetworkInterface -Name $nic | Select-Object -expand ipconfigurations | Select-Object -expand privateipaddress } }

上面的脚本适用于拉取各种不同的 Azure VM。

接下来我可以尝试什么?

最佳答案

注意:

  • 此答案在 Select-Object 和计算属性的上下文中解决了所提出的问题

  • 有关使用 [pscustomobject] 实例显式构造的基于 ForEach-Object 的替代方案,请参阅 zett42's helpful answer .

<小时/>

而脚本 block calculated properties按顺序执行,对于每个输入对象,它们各自在相对于调用者自己的作用域中运行,这使得它们之间的状态共享变得复杂。

但是,您可以简单地创建一个想要在 parent 作用域中共享其值的变量,在脚本内最简单的情况下,该变量是 $script: 作用域,如以下简化示例所示(它使用对 Get-Date 的调用代替对 Azure cmdlet 的调用,作为您不想重复的调用的示例):

# Share the result of the `Get-Date` call between calculated properties.
'foo' | Select-Object `
@{ n='Month'; e = { $script:dt = Get-Date; $dt.Month } },
@{ n='Year'; e = { $dt.Year } }

输出:

Month Year
----- ----
8 2022

这证明 $script: 范围的 $dt 变量已成功用于第二个计算属性。

如果您想可靠地定位范围,如果您在嵌套函数调用中运行,则该范围可能与$script:范围不同,例如,将 $script:dt = Get-Date 替换为
Set-Variable -Scope 1 dt (Get-Date)

注意:

  • 计算属性的脚本 block 以及延迟绑定(bind)脚本 block 在子范围中运行可能会令人惊讶,因为它与传递给 ForEach- 的脚本 block 的行为形成对比例如,ObjectWhere-Object - 有关讨论,请参阅 GitHub issue #7157 .

关于azure - 优化 PowerShell 代码以避免在计算属性内多次调用 cmdlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73388882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com