代码之家  ›  专栏  ›  技术社区  ›  scriptnoobie

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

  •  1
  • scriptnoobie  · 技术社区  · 8 年前

    我的环境中大约有9000个DFS共享驱动器。不幸的是,由于使用powershell无法轻松找到每个共享驱动器的大小,我试图一次映射22个驱动器,并将转储结果保存到csv文件 所以我在尝试这样的事情

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

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

    1 回复  |  直到 8 年前
        1
  •  0
  •   Mark Wragg    8 年前

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

    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)。

    我创建了 清理PSDrive 功能,因为我意识到您需要在对未知数量的剩余映射驱动器进行最终迭代后进行清理。函数通过使用 Get-PSDrive . 然后我们使用 -End 块,共块 ForEach-Object 进行最终清理。

    我使用 -Begin 的块 ForEach对象 宣布 $Letter 除了它能很好地连接到计数器的使用位置之外,没有其他原因。