【问题标题】:Powershell comparison for local network drive mappings against an array of drive mappings本地网络驱动器映射与驱动器映射数组的 Powershell 比较
【发布时间】: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


    【解决方案1】:

    这很令人困惑,因为Get-PSDrive H 将显示Root 属性是网络映射名称。但是(Get-PSDrive H).Root 将返回H:\。很奇怪,对吧? 您可以使用 DisplayRoot 属性来获取 real 网络共享:

    If((Get-PSDrive $mapping.driveletter).DisplayRoot -ne $mapping.networkpath){
        #un-map and re-map the drive
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多