【发布时间】:2021-06-04 07:10:57
【问题描述】:
我正在开发一个用于公司驱动器映射的 PowerShell 脚本。目前,该脚本正在获取登录的用户名并查询 AD 以存储他们的组。从那里,我们将他们的 AD 组与一个数组(映射)进行比较,然后相应地映射他们的驱动器。
问题是,我们不想篡改它们当前的驱动器映射如果它们已经正确映射(它们匹配映射数组字母/路径)。我尝试过比较、循环等,但我似乎找不到一个好方法来比较当前映射的网络驱动器号/路径与数组,如果相同,则忽略它。
本质上,如果当前映射与阵列中的内容匹配,我们不希望断开网络驱动器。
$mappings = @(
[pscustomobject]@{adgroup='ADGROUP1';driveletter='G';networkpath='\\server\location1'}
[pscustomobject]@{adgroup='ADGROUP2';driveletter='H';networkpath='\\server\location2'}
[pscustomobject]@{adgroup='ADGROUP3';driveletter='I';networkpath='\\server\location3'}
[pscustomobject]@{adgroup='ADGROUP4';driveletter='J';networkpath='\\server\location4'}
)
$groups = Get-ADPrincipalGroupMembership $env:username | select name
$currentDrives = Get-PSDrive -PSProvider FileSystem | Select-Object Name, DisplayRoot | Where-Object {$_.DisplayRoot -ne $null}
foreach ($mapping in $mappings) {
if ($groups -match $mapping.adgroup) {
Remove-PSDrive -Name $mapping.driveletter -Force -ErrorAction SilentlyContinue
New-PSDrive -Name $mapping.driveletter -PSProvider FileSystem -Root $mapping.networkpath -Persist -Scope Global -ErrorAction SilentlyContinue | Out-Null
}
}
【问题讨论】:
标签: arrays powershell compare