我的环境中有大约9000个DFS共享驱动器。不幸的是,因为没有简单的方法来查找每个共享驱动器与PowerShell的大小我试图一次映射22并将转储结果保存到csv文件 所以我正在尝试这样的事情
$csv=Import-Csv "path"
$csv.Name
foreach-object{
New-PSdrive -Root $_ -Name $driveletter}
问题是我需要从驱动器号E开始,一直到Z,获取驱动器大小,取消映射当前的22个驱动器,然后转到下一个22,依此类推,直到第2500个路径 有一个简单的方法吗?
答案 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
,除了将它很好地连接到使用计数器的地方之外没有其他原因。