我想创建一个函数来获取没有任何虚拟网络的 Key Vault 列表

I want to create a function that will get a list of Key Vaults that don't have any virtual networks

脚本部分单独工作,但是当 运行 一起生成错误输出(即显示具有虚拟网络的 KeyVaults。我该如何解决这个问题?

 function Get-KeyVault {

 [CmdletBinding()]

param (

    #Enter the path you would like to save the excel output  
    [Parameter(Mandatory)]
    [string]
    $Path         
    )

 $KeyVaults= Get-AzKeyVault
 $result=@()  

  foreach($keyvault in $KeyVaults)
 {
     $NetworkAcls=(Get-AzKeyVault -VaultName $keyvault).NetworkAcls
     $VirtualNetworkResourceIds= $NetworkAcls.VirtualNetworkResourceIds
     if ($VirtualNetworkResourceIds -eq $null)
         {
          $obj = [PSCustomObject]@{
         Name= $keyvault.VaultName
         ResourceGroup= $keyvault.ResourceGroupName
         Location= $keyvault.Location
         }
   $result += $obj
        }
     }
    $result | Export-Csv -Path $Path -NoTypeInformation
 }

你的代码似乎没问题,除了以下部分:

$NetworkAcls=(Get-AzKeyVault -VaultName $keyvault).NetworkAcls

-VaultName 中,您声明 $keyvault来自 keyvaults 列表的对象不是 keyvault name$NetworkACLs$VirtualNetworkResourceIds 不提供任何输出和 if 语句都无效,导致将所有 keyvault 名称、它们的资源组名称和位置存储在自定义对象中.

要解决这个问题,您必须使用以下内容,以便将正确的输出存储在 NetworkAcls 变量中,然后执行以下步骤:

$NetworkAcls=(Get-AzKeyVault -VaultName $keyvault.VaultName).NetworkAcls

完整代码:

function Get-KeyVault {

 [CmdletBinding()]

param (

    #Enter the path you would like to save the excel output  
    [Parameter(Mandatory)]
    [string] $Path         
    )

 $KeyVaults= Get-AzKeyVault
 $result=@()  

  foreach($keyvault in $KeyVaults)
 {
     $NetworkAcls=(Get-AzKeyVault -VaultName $keyvault.VaultName).NetworkAcls
     $VirtualNetworkResourceIds= $NetworkAcls.VirtualNetworkResourceIds
     if ($VirtualNetworkResourceIds -eq $Null)
         {
          $obj = [PSCustomObject]@{
         Name= $keyvault.VaultName
         ResourceGroup= $keyvault.ResourceGroupName
         Location= $keyvault.Location
         }
   $result += $obj

        }
     }
    $result | Export-Csv -Path $Path -NoTypeInformation
 }

我在我的环境以及以下环境中进行了同样的测试:

具有网络策略的 KV:

问题输出:

应用修复后: