迁移到 MS Graph 后的 Powershell 7.2 问题

Powershell 7.2 Issue after migration to MS Graph

自从模块 Az.Resources 从 Azure AD Graph API 迁移到 MS Graph API 我无法 运行 这些 cmdlet 的组合,也管道不工作

get-azadserviceprincipal -displayname <some name> | get-azadspcredential

这似乎是一个错误,因为 migration.The 命令 get-azadspcredential 需要参数 -objectid 并且它从 get-azadserviceprincipal 的输出中获取此参数。 由于它不再工作了,我如何将 obejctid 作为输入传递给 get-azadspcredential

到目前为止我尝试了什么:

#List service principal with name sp-acr-mit-pull
$sp=Get-AzADServicePrincipal -SearchString sp-acr-mit-pull
#Get Enddate for sp-acr-mit-pull and also create calculated property "Displayname"
$sp_enddate= @( foreach ($objectid in $sp.id)
{
  Get-AzADspcredential -objectid $objectid -ErrorAction SilentlyContinue | Select-Object -Property @{Name = 'DisplayName'; Expression = { $sp.DisplayName } },@{Name = 'EndDate'; Expression = { $_.EndDateTime -as [datetime] } }
})
$sp_enddate

这似乎有效,输出为:

DisplayName         EndDate             
-----------         -------             
sp-acr-mit-pull     2/24/2022 3:59:26 PM

但我的问题是如果 Get-AzADServicePrincipal -SearchString <some name> 找到多个 entry.E.g

$sp=Get-AzADServicePrincipal -SearchString sp-acr-mit
$sp_enddate= @( foreach ($objectid in $sp.id)
{
Get-AzADspcredential -objectid $objectid -ErrorAction SilentlyContinue | Select-Object -Property @{Name = 'DisplayName'; Expression = { $sp.DisplayName } },@{Name = 'EndDate'; Expression = { $_.EndDateTime -as [datetime] } }
})

$sp_enddate

我得到这个输出

DisplayName                        EndDate             
-----------                        -------             
{sp-acr-mit-pull, sp-acr-mit-push} 2/24/2022 3:59:26 PM
{sp-acr-mit-pull, sp-acr-mit-push} 2/24/2022 3:59:25 PM

发生这种情况是因为 $sp.DisplayName 包含两个值:

$sp.DisplayName
sp-acr-mit-pull
sp-acr-mit-push

知道如何将 $sp.DisplayName 的值一一传递吗?预期输出是这样的:

DisplayName                        EndDate             
-----------                        -------             
sp-acr-mit-pull                    2/24/2022 3:59:26 PM
sp-acr-mit-push                    2/24/2022 3:59:25 PM

请查看下面更新的脚本。

$sp=Get-AzADServicePrincipal -SearchString sp-acr-mit
$sp_enddate= @(
    foreach ($objectid in $sp){
        Get-AzADspcredential -objectid $objectid.id -ErrorAction SilentlyContinue | Select-Object -Property @{Name = 'DisplayName'; Expression = { $objectID.DisplayName } },@{Name = 'EndDate'; Expression = { $_.EndDateTime -as [datetime] } }
    }
)

$sp_enddate

在重新评估您的 Select 声明后,您似乎输出了 $spdisplayname 的所有实例,而不是它们的单个元素。因为你需要在 foreach 循环中从实例化的 $ObjectID 中引用它。

编辑:错过了您在 foreach 循环中从 $sp 中删除所有属性的事实,更新后它保留了它们并且对 Get-AzADspcredential 的调用引用了 $objectid.id.