我的环境中有大约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
动态获取它来实现此目的。然后我们使用-End
的ForEach-Object
块进行最后的清理。
我使用-Begin
的ForEach-Object
块来声明$Letter
,除了它很好地连接到使用计数器的位置之外没有其他原因。