如何使用 powershell 一次最多映射 22 个共享驱动器?

How to map multiple share drives upto 22 at a time using powershell?

我的环境中有大约 9000 个 DFS 共享驱动器。不幸的是,因为没有简单的方法可以用 powershell 找出每个共享驱动器的大小,我试图一次映射 22 个并将转储结果保存到 csv 文件 所以我正在尝试这样的事情

$csv=Import-Csv "path"
$csv.Name
foreach-object{
New-PSdrive -Root $_ -Name $driveletter}

问题是我需要从盘符 E 开始一直到 Z,获取驱动器大小,取消映射当前 22 个驱动器,然后转到下一个 22 等等,直到第 2500 条路径 有没有简单的方法来做到这一点?

对于您的问题,这是一个可能的解决方案(尽管根据评论,重复使用相同的驱动器号会更简单,但这可能会更快):

Function CleanUp-PSDrive {
    Get-PSDrive -PSProvider FileSystem | Where { $_.Name -in (69..90 | ForEach-Object { [char]$_ })} | Remove-PSDrive
}

$Csv = Import-Csv "path"

$Csv.Name | ForEach-Object -Begin { $Letter = 69 } {

    New-PSdrive -Root $_ -Name ([char]$Letter) -PSProvider FileSystem

    #Do some stuff..

    if ($Letter -lt 90) 
    { 
        $Letter++ 
    } 
    else 
    { 
        CleanUp-PSDrive
        $Letter = 69
    }
} -End { CleanUp-PSDrive }

这使用 E - Z (69 - 90) 的 ASCII 代码在遍历 CSV 时创建带字母的驱动器,当我们到达字母 90 (Z) 时,它会使用我声明的函数删除所有驱动器调用 CleanUp-PSDrive 然后将 $Letter 设置为从 69 (E) 重新开始。

我创建了 CleanUp-PSDrive 函数,因为我意识到您需要在未知数量的剩余映射驱动器的最后一次迭代之后进行清理。该函数通过使用 Get-PSDrive 动态获取它们来完成此操作。然后我们使用 ForEach-Object-End 块来进行最后的清理。

我使用 ForEach-Object-Begin 块来声明 $Letter 没有其他原因,只是它将它很好地连接到使用计数器的地方。