在 For Each 语句中过滤 Powershell 结果
Filtering Powershell result in For Each statement
我已经编写(或至少尝试编写)一个简单的脚本来获取分配给特定 Azure AD 组的所有 Microsoft Intune Defender 策略。
脚本获取所有 Defender 策略,找到链接到这些策略的组 ID,然后使用 Get-AzureADGroup 获取实际名称。
现在我需要找到一种方法来仅显示与特定组名匹配的策略(硬编码)。在脚本的顶部,我有一个带有组名的变量。我只是找不到如何过滤所有 $intent(s) 以仅显示链接到组名称变量的方法。
Connect-MSGraph -ForceInteractive
Update-MSGraphEnvironment -SchemaVersion beta
Connect-MSGraph
Connect-AzureAD
$groupname = "group-name-here"
$intents = Invoke-MSGraphRequest -HttpMethod GET -Url "deviceManagement/intents" | Get-MSGraphAllPages
foreach ($intent in $intents) {
$PolicyID = Invoke-MSGraphRequest -HttpMethod GET -Url "deviceManagement/intents/$($intent.Id)/assignments"
$AssignmentGroupIDs = $PolicyID.value.target.groupID
foreach ($AssignmentGroupID in $AssignmentGroupIDs) {
$AssignmentGroupName = Get-AzureADGroup -ObjectId $AssignmentGroupID
}
}
Write-Host "Number of policies found: $($intents.Id.Count)" -ForegroundColor cyan
Write-Host $AssignmentGroupName.DisplayName
Write-Host $intent.displayName
您创建但不分配给变量的任何值都将成为脚本块输出的一部分。这意味着您可以这样做:
$result = foreach (...) {
if (condition) {
$value
}
}
和 $result
将包含循环中的所有 $value
。
在上下文中(未经测试,但你明白了):
$matchingIntents = foreach ($intent in $intents) {
$PolicyID = Invoke-MSGraphRequest -HttpMethod GET -Url "deviceManagement/intents/$($intent.Id)/assignments"
$AssignmentGroupIDs = $PolicyID.value.target.groupID
foreach ($AssignmentGroupID in $AssignmentGroupIDs) {
$AssignmentGroupName = Get-AzureADGroup -ObjectId $AssignmentGroupID
if ($AssignmentGroupName -eq $groupname) {
$intent
break
}
}
}
我已经编写(或至少尝试编写)一个简单的脚本来获取分配给特定 Azure AD 组的所有 Microsoft Intune Defender 策略。
脚本获取所有 Defender 策略,找到链接到这些策略的组 ID,然后使用 Get-AzureADGroup 获取实际名称。
现在我需要找到一种方法来仅显示与特定组名匹配的策略(硬编码)。在脚本的顶部,我有一个带有组名的变量。我只是找不到如何过滤所有 $intent(s) 以仅显示链接到组名称变量的方法。
Connect-MSGraph -ForceInteractive
Update-MSGraphEnvironment -SchemaVersion beta
Connect-MSGraph
Connect-AzureAD
$groupname = "group-name-here"
$intents = Invoke-MSGraphRequest -HttpMethod GET -Url "deviceManagement/intents" | Get-MSGraphAllPages
foreach ($intent in $intents) {
$PolicyID = Invoke-MSGraphRequest -HttpMethod GET -Url "deviceManagement/intents/$($intent.Id)/assignments"
$AssignmentGroupIDs = $PolicyID.value.target.groupID
foreach ($AssignmentGroupID in $AssignmentGroupIDs) {
$AssignmentGroupName = Get-AzureADGroup -ObjectId $AssignmentGroupID
}
}
Write-Host "Number of policies found: $($intents.Id.Count)" -ForegroundColor cyan
Write-Host $AssignmentGroupName.DisplayName
Write-Host $intent.displayName
您创建但不分配给变量的任何值都将成为脚本块输出的一部分。这意味着您可以这样做:
$result = foreach (...) {
if (condition) {
$value
}
}
和 $result
将包含循环中的所有 $value
。
在上下文中(未经测试,但你明白了):
$matchingIntents = foreach ($intent in $intents) {
$PolicyID = Invoke-MSGraphRequest -HttpMethod GET -Url "deviceManagement/intents/$($intent.Id)/assignments"
$AssignmentGroupIDs = $PolicyID.value.target.groupID
foreach ($AssignmentGroupID in $AssignmentGroupIDs) {
$AssignmentGroupName = Get-AzureADGroup -ObjectId $AssignmentGroupID
if ($AssignmentGroupName -eq $groupname) {
$intent
break
}
}
}