Powershell 是否可以筛选结果并分配给变量?
目前,我正在创建一个哈希表,其中ClientCode是键,值是AD中名称中包含“ClientCode_389;”的任何组。例如,名为“客户经理”和“客户开发人员”的组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
$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上做的。