如何使用PowerShell一次映射多达22个驱动器?

时间:2018-01-05 13:31:33

标签: powershell dictionary networking share drive

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

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

问题是我需要从驱动器号E开始,一直到Z,获取驱动器大小,取消映射当前的22个驱动器,然后转到下一个22,依此类推,直到第2500个路径 有一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

这里提供了一个可能的解决方案(尽管根据评论,重复使用相同的驱动器号会更简单,但这可能会更快):

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)时,它使用我声明的函数{删除所有驱动器{ {1}}然后将$ Letter设置为从69(E)开始。

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

我使用ForEach-Object的{​​{1}}块来声明-Begin,除了将它很好地连接到使用计数器的地方之外没有其他原因。