我创建了一个工作流程,以递归方式扫描数百个文件共享以查找特定文件名/扩展名。一切都很好,但我想知道是否有办法提高它的速度。
在foreach-parallel,我从共享列表中递归获取子项和ACL,每次20个。我想知道的是,是否有办法让它在GCI内并行处理。
换句话说,foreach-并行嵌套是可行/可行的,如果是这样,你可以提供诸如语法,做这些等的危险等建议。我发现它的文档很少,我希望一些专家建议
如果这没有意义,可以采用不同的方式来解释它。我有5个我正在递归搜索的股票,所有股票都有不同的尺寸和不同数量的文件:
\ share1 \ folder1大小:5GB
\ share2 \ folder1大小:79GB
\ share3 \ folder1大小:2GB
\ share4 \ folder1大小:8GB
\ share5 \ folder1大小:103GB
GCI将同时处理所有5个,但是由于它们的大小,share2和share5将比其他的花费更多的时间。有没有办法让脚本并行处理所有5个共享,并在GCI中同时处理多个文件?那么它会一次开始搜索所有20个股票,并一次获得有关共享中5个文件的信息吗?
这是我正在做的事情,由于长度原因缩短了一点,变量名称/输入已更改。我确信在这里我可以改进一些事情,但总的来说它是有效的。
workflow Scan-Shares
{
[cmdletbinding()]
param(
[int]$ThrottleLimit = 20
)
$File1 = Import-csv C:\Drives.csv
$ExtList = @((Invoke-WebRequest -Uri "www.websitewithfilenames.com").content | convertfrom-json | % {$_.filters})
foreach -parallel -throttlelimit $throttlelimit ($Line in $File1)
{
inlinescript
{
$Line=$using:Line
$Extlist=$using:Extlist
$Path = $Line.Path + '\*'
$Directory = Get-ChildItem -Path $path -Recurse -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue | select-object name, Extension, FullName, LastWriteTime, Directory -ExpandProperty Name
$singleRegex = ($extlist | %{ '^' + $_ + '$' }) -join '|'
[array]$Files = $Directory -match $singleRegex
if($files.count -gt 0 )
{
foreach($SingleFile in $Files)
{
$Owner = (Get-Acl $FullName -Erroraction SilentlyContinue -WarningAction SilentlyContinue).Owner
New-Object -TypeName PSCustomObject -Property @{
Path = $File.Fullname
Filename = $File.Name
LastWriteTime = $File.LastWriteTime
Owner = $Owner
Directory = $File.Directory } |
Export-Csv -Force C:\Share-Results.CSV -Append
}
}
}
}
}