我正在尝试创建一个路由来反映我们的生产环境和上一个环境。
我遇到了一个问题,powershell 中的 -match 函数无法正常工作。
我在名为 $PrevGroupInfo 的数组中有预览组,但是当我尝试搜索产品组的名称时,它不匹配任何内容。如果我使用 .profile.name 搜索,它会返回名称,但不会返回其余信息。
任何帮助将不胜感激!
Clear-host
$ProdSite = "https://logrhythm.okta.com"
$PrevSite = "https://logrhythm.oktapreview.com"
import-module OktaAPI
Connect-Okta $ProdToken $ProdSite
#Get Prod Users & Groups
$ProdGroupInfo = Invoke-Method GET "/api/v1/groups?limit=10000"
$ProdUserInfo = Invoke-Method GET "/api/v1/users?limit=10000"
Connect-Okta $PrevToken $PrevSite
#Get Prev Users & Groups
$PrevGroupInfo = Invoke-Method GET "/api/v1/groups?limit=10000"
$PrevUserInfo = Invoke-Method GET "/api/v1/users?limit=10000"
ForEach ($Group in $ProdGroupInfo)
{
If ($Group.count -gt 0)
{
Connect-Okta $ProdToken $ProdSite
#Get Group Members from Prod
$Members = Get-OktaGroupMember $Group.id
$GroupName = $Group.profile.name
Connect-Okta $PrevToken $PrevSite
$NewGroup = @()
#***** Get Preview Group Name & ID
If ($PrevGroup = $PrevgroupInfo -match $Group.profile.name)
{
$NewGroup += $PrevGroup
Write-Host "Preview Group: " $NewGroup `t`t "ID: " $NewGroup.id -ForegroundColor DarkGreen
}
else
{
Write-Host "Group not matched in Preview: " $Group.profile.name -ForegroundColor Red
}
<#> If ($Members -ne $null)
{
ForEach ($Item in $Members)
{
Write-Host `t`t "Item: " $Item.profile.displayname `t`t "ID: " $Item.id
}
Pause
}#>
}
}
我已经尝试了所有我合作的东西,我能想出办法,但都被难住了。
要将完整的对象保留在
$PrevGroup
中,请使用Where-Object
进行过滤,例如:
If ($PrevGroup = $PrevgroupInfo | Where-Object {$_.profile.name -match $Group.profile.name})
如果您希望
name
属性相同,那么最好使用 -like
或 -eq
:
$_.profile.name -like $Group.profile.name