Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 将用户匹配到Hashmap_Windows_Powershell - Fatal编程技术网

Windows 将用户匹配到Hashmap

Windows 将用户匹配到Hashmap,windows,powershell,Windows,Powershell,有一些PowerShell的问题,我需要一些帮助,让我走上正确的道路 我们正在停用Okta服务器,因为它是垃圾,但它做了一些我们需要的事情,比如动态组管理 我还有其他脚本,其中我为GUI创建了一个有序字典,以补充我们的O365租户,该租户将位置与OU目录相匹配 我想做的是匹配我们指定用户目录中的所有用户,并根据这些目录将人员分配给这些组。我为要分配给它们的通讯组创建了另一个字典 这是我到目前为止得到的。我肯定我做得太过分了 $TargetDGs = [ordered]@{} $adg = Get

有一些PowerShell的问题,我需要一些帮助,让我走上正确的道路

我们正在停用Okta服务器,因为它是垃圾,但它做了一些我们需要的事情,比如动态组管理

我还有其他脚本,其中我为GUI创建了一个有序字典,以补充我们的O365租户,该租户将位置与OU目录相匹配

我想做的是匹配我们指定用户目录中的所有用户,并根据这些目录将人员分配给这些组。我为要分配给它们的通讯组创建了另一个字典

这是我到目前为止得到的。我肯定我做得太过分了

$TargetDGs = [ordered]@{}
$adg = Get-ADGroup -SearchBase "OU=Automagic Populating,OU=Groups"  -Filter *
$adg | % { $TargetDGs.add($_.Name, $_.DistinguishedName) }

$users = Get-ADUser -Filter {(Enabled -eq $true)} 

$sites = [ordered]@{
    'Amsterdam'             = "OU=Users,OU=Amsterdam,OU=Europe,OU=Sites,DC=MYDOMAIN";
    'Atlanta'               = "OU=Users,OU=Atlanta,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Boston'                = "OU=Users,OU=Boston,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Charlotte'             = "OU=Users,OU=CharlotteOU=US - East,OU=Sites,DC=MYDOMAIN";
    'Chicago'               = "OU=Users,OU=Chicago,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Dallas'                = "OU=Users,OU=Dallas,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Denver'                = "OU=Users,OU=Denver,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Detroit'               = "OU=Users,OU=Detroit,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Frankfurt'             = "OU=Users,OU=Frankfurt,OU=Europe,OU=Sites,DC=MYDOMAIN";
    'Houston'               = "OU=Users,OU=Houston,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Las Vegas'             = "OU=Users,OU=Las Vegas,OU=US - West,OU=Sites,DC=MYDOMAIN"
    'London'                = "OU=Users,OU=London,OU=Europe,OU=Sites,DC=MYDOMAIN";
    'Los Angeles'           = "OU=Users,OU=Los Angeles,OU=US - West,OU=Sites,OU=MYDOMAIN";
    'Miami'                 = "OU=Users,OU=Miami,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Montreal'              = "OU=Users,OU=Montreal,OU=Canada,OU=Sites,DC=MYDOMAIN";
    'Nashville'             = "OU=Users,OU=Nashville,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'New Jersey'            = "OU=Users,OU=New Jersey,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'New Orleans'           = "OU=Users,OU=New Orleans,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'New York'              = "OU=Users,OU=New York,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Orange County'         = "OU=Users,OU=Orange County,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'Orlando'               = "OU=Users,OU=Orlando,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Philadelphia'          = "OU=Users,OU=Philadelphia,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'Phoenix'               = "OU=Users,OU=Phoenix,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'San Antonio'           = "OU=Users,OU=San Santonio,OU=US - East,OU=Sites,DC=MYDOMAIN";
    'San Diego'             = "OU=Users,OU=San Diego,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'San Francisco'         = "OU=Users,OU=San Francisco,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'Seattle'               = "OU=Users,OU=Seattle,OU=US - West,OU=Sites,DC=MYDOMAIN";
    'Toronto'               = "OU=Users,OU=Toronto,OU=Canada,OU=Sites,DC=MYDOMAIN";
    'Vancouver'             = "OU=Users,OU=Vancouver,OU=Canada,OU=Sites,DC=MYDOMAIN";
    'Washington DC'         = "OU=Users,OU=Washington DC,OU=US - East,OU=Sites,DC=MYDOMAIN";
}
所以我要实现的逻辑是

$TargetDGsDict
$User
$SitesDict

If ($user.DistinguishedName -like $SitesDict.Value){
AD-ADGroupMember -Identity $TargetDGsDict.Value -Member $User
}

那么,如果不写35条if语句,我如何才能让它看起来漂亮有效呢?我甚至需要一本字典吗?我想得太多了吗?

如果DG都是以用户OU的父OU命名的,我认为这是基于您的示例代码的情况,那么这就变成:

$TargetDGs = [ordered]@{}
$adg = Get-ADGroup -SearchBase "OU=Automagic Populating,OU=Groups"  -Filter *
$adg | % { $TargetDGs.add($_.Name, $_.DistinguishedName) }

$users = Get-ADUser -Filter {(Enabled -eq $true)} 

$Users|?{$_.DistinguishedName -match 'OU=Users,OU=([^,]+),'}|%{
    Add-ADGroupMember -Identity $TargetDGsDict[$Matches[1]] -Member $_
}

这将查找用户的OU中与组名匹配的部分,并引用已为其创建哈希表的组。如果用户所在的OU没有关联的组,则可能会引发错误。如果存在这种情况,您如何将
$sites
关联到
$TargetDGsDict
?DG的名称是否与
$sites
中的键相同?如果是这样的话,用一点正则表达式就非常容易了。他们不是因为广告不喜欢这样。我的任务是重新创建DGs,这在其他方面很容易,但我们希望动态更新它们。目前的用户群称为洛杉矶用户、拉斯维加斯用户等,他们都是用户。我相信我会完全按照现在的样子重新命名新的TARGETDG。我有$sites作为一种获取用户的方式。我忍不住觉得我只是想得太多了。请停止使用scriptblocks作为
-Filter
参数。它需要一个字符串,所以请使用一个,否则您可能会在代码中引入奇怪的错误。我刚才复制了OP的示例,但您是对的,它应该是一个字符串而不是脚本块。如果只希望启用用户返回,您会有什么建议?