Powershell 是否可以筛选结果并分配给变量?

Powershell 是否可以筛选结果并分配给变量?,powershell,active-directory,Powershell,Active Directory,目前,我正在创建一个哈希表,其中ClientCode是键,值是AD中名称中包含“ClientCode_389;”的任何组。例如,名为“客户经理”和“客户开发人员”的组 $clientTable = @{ } foreach ($row in $cemTable) { $clientCode = "$($row.ClientCode)" $groups = @(Get-ADGroup -Filter "Name -like '*$($row.ClientCode)_*'" -Se

目前,我正在创建一个哈希表,其中ClientCode是键,值是AD中名称中包含“ClientCode_389;”的任何组。例如,名为“客户经理”和“客户开发人员”的组

$clientTable = @{ }

foreach ($row in $cemTable) {
    $clientCode = "$($row.ClientCode)"
    $groups = @(Get-ADGroup -Filter "Name -like '*$($row.ClientCode)_*'" -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=SomeGroups,DC=somecompany,DC=com" | select -Expand Name)
    write-host "Found $($groups.count) group(s) for: $($row.ClientCode)"
    $clientTable[$clientCode] = $groups -join ","
}
$clientTable

现在我想搜索Get AdGroup搜索的结果,并根据组将其分配给变量。例如,我的搜索中的所有经理组都将分配给经理变量,其他角色也是如此。如果我想更改/限制/授予访问权限等,这将允许我在将来自动化和更改遥测。到目前为止,我已将其编辑为此

foreach($row in $cemTable) {

    $clientCode = "$($row.ClientCode)"

    $groups = @(Get-ADGroup -Filter "Name -like '*$($row.ClientCode)_*'" -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=Some Groups,DC=somecompany,DC=com" | select -Expand Name)

    write-host "Found $($groups.count) group(s) for: $($row.ClientCode)"

    $managers_group =

    $developers_group =

}
更新
您可以使用已有的$groups来创建带有筛选对象的新变量

$groups = (Get-ADGroup -Filter "Name -like '*$($row.ClientCode)_*'" -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=Some Groups,DC=somecompany,DC=com" | select -Expand Name).Name
$managers = $groups | ? { $_ -like "Manager*" }
$developers = $groups | ? {$_ -like "Developers*" }
一旦有了这三样东西,就可以将它们保存到PSObject列表中

创建对象列表

$combined = @()
foreach($rec in $csv) { 

    if (!($Combined | ? { $_.ClientCode -eq $rec.ClientCode })) {

        $filter = "*$($rec.ClientCode)_*"
        $groups = (Get-ADGroup -Filter 'Name -like $filter' -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=Some Groups,DC=somecompany,DC=com" | select Name).Name
        $managers = $groups | ? { $_ -like "Manager*" }
        $developers = $groups | ? {$_ -like "Developers*" }

        $object = [PSCustomObject]@{
            ClientCode = $rec.ClientCode
            Groups = $groups
            Managers = $managers
            Developers = $developers
        }

        $Combined += $object
    }
}

$combined
更新

请注意,经理和开发人员是
$combined
列表的一部分。每个$combled项目都有不同数量的经理和开发人员,我相信这就是您要寻找的

# Use this after you are done with your foreach loop to display the values in $combined
$combined | % { Write-Output "$($_.ClientCode) has $($_.Groups.Count) groups, $($_.Managers.Count) managers, and $($_.Developers.Count) developers" }
您还可以查找组、经理或开发人员,查找特定的客户端代码,如下所示:

$result = $combined | ? {$_.ClientCode -eq "TestClientCode"}
$result.Groups
$result.Managers
$result.Developers

您可以使用已有的$groups来创建带有筛选对象的新变量

$groups = (Get-ADGroup -Filter "Name -like '*$($row.ClientCode)_*'" -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=Some Groups,DC=somecompany,DC=com" | select -Expand Name).Name
$managers = $groups | ? { $_ -like "Manager*" }
$developers = $groups | ? {$_ -like "Developers*" }
一旦有了这三样东西,就可以将它们保存到PSObject列表中

创建对象列表

$combined = @()
foreach($rec in $csv) { 

    if (!($Combined | ? { $_.ClientCode -eq $rec.ClientCode })) {

        $filter = "*$($rec.ClientCode)_*"
        $groups = (Get-ADGroup -Filter 'Name -like $filter' -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=Some Groups,DC=somecompany,DC=com" | select Name).Name
        $managers = $groups | ? { $_ -like "Manager*" }
        $developers = $groups | ? {$_ -like "Developers*" }

        $object = [PSCustomObject]@{
            ClientCode = $rec.ClientCode
            Groups = $groups
            Managers = $managers
            Developers = $developers
        }

        $Combined += $object
    }
}

$combined
更新

请注意,经理和开发人员是
$combined
列表的一部分。每个$combled项目都有不同数量的经理和开发人员,我相信这就是您要寻找的

# Use this after you are done with your foreach loop to display the values in $combined
$combined | % { Write-Output "$($_.ClientCode) has $($_.Groups.Count) groups, $($_.Managers.Count) managers, and $($_.Developers.Count) developers" }
您还可以查找组、经理或开发人员,查找特定的客户端代码,如下所示:

$result = $combined | ? {$_.ClientCode -eq "TestClientCode"}
$result.Groups
$result.Managers
$result.Developers
你可以试试:

$managers = $groups -like "Manager*" 
$developers = $groups -like "Developers*"
然后使用

$managers.count
$developers.count
要查看变量中存储了多少项,可以尝试:

$managers = $groups -like "Manager*" 
$developers = $groups -like "Developers*"
然后使用

$managers.count
$developers.count

要查看变量中存储了多少项

在执行$managers.countI时,我仍然为变量分配了0。我删除了组周围的@()。。并在末尾添加了.Name。应该会修好的嗯,似乎不起作用我不知道是什么原因wrong@ineedhelp检查$groups中的组名,看看是否有以Manager或developer开头的组。它们确实存在,我想知道这是否与我的$cemTable是哈希表有关。可以在哈希表上执行foreach吗?我想在你的回答中,你是在csv上做的。当我做$managers.countI时,我仍然将0分配给我的变量。我删除了组周围的@()。。并在末尾添加了.Name。应该会修好的嗯,似乎不起作用我不知道是什么原因wrong@ineedhelp检查$groups中的组名,看看是否有以Manager或developer开头的组。它们确实存在,我想知道这是否与我的$cemTable是哈希表有关。可以在哈希表上执行foreach吗?我认为你的回答是在csv上做的。