Tenho um script no powershell que busca o local de uma pasta conforme o nome do arquivo, porém, o cmdlet Get-ChildItem demora cerca de 10min/arq, precisaria otimizar esse tempo. Existe alguma clase dotNet, C# ou cmdlet que faça isso com mais rápidez?
$Inicio = "Iniciando..."
$Processando = "Processando..."
$Fim = "Finalizado..."
echo $Inicio
Get-Date
$Lista = Get-ChildItem -path C:\Users\gabriel.lima\Downloads\anexos\*.JPG #Carrega arquivos scaneados
$Lista.GetType()|Select-Object Name #Converte em lista para foreach
$Total = $Lista.Count
$Feito = 1
#Loop para cada elemento da lista
foreach ($element in $Lista) {
echo "$Processando ... $Feito de $Total"
$StringBuilder = New-Object System.Text.StringBuilder #cria objeto .net que trata strings
$Documento = $element.name #carrega name do element
$StringBuilder = $Documento #define o name no stringbuilder
$Matricula = $StringBuilder.Replace(".jpg","") #tira o '.jpg' do name do documento
#Trata prefixos dos arquivos - FIXO
if ($Matricula -match "Doc_Admissao") {
$Matricula = $Matricula.Replace("Doc_Admissao","")
}
if ($Matricula -match "Doc_Afastamentos") {
$Matricula = $Matricula.Replace("Doc_Afastamentos_","")
}
if ($Matricula -match "Doc_Ferias" ) {
$Matricula = $Matricula.Replace("Doc_Ferias_","")
}
if ($Matricula -match "Doc_Outros" ) {
$Matricula = $Matricula.Replace("Doc_Outros_","")
}
if ($Matricula -match "Doc_Pensao" ) {
$Matricula = $Matricula.Replace("Doc_Pensao_","")
}
if ($Matricula -match "Doc_Ponto" ) {
$Matricula = $Matricula.Replace("Doc_Ponto_","")
}
if ($Matricula -match "Doc_Processos" ) {
$Matricula = $Matricula.Replace("Doc_Processos_","")
}
if ($Matricula -match "Doc_Rescisao" ) {
$Matricula = $Matricula.Replace("Doc_Rescisao_","")
}
#tira os possiveis espaços da matricula
$Matricula = $Matricula.Replace(" ","")
#Tratamento para o tipo de documento
$TipoDoc = $StringBuilder.Replace($Matricula,"")
$TipoDoc = $TipoDoc.Replace("_.jpg","")
#Busca local da pasta do func
$FullName = Get-ChildItem \\192.168.100.118\arquivos_senior\ArqInteg\Prontuario_Eletronico\ -Recurse | Where-Object Name -Match $Matricula
$Pasta = $FullName.GetValue(0)
$FullName = $Pasta.FullName
#$FullName = "\\192.168.100.118\arquivos_senior\ArqInteg\Prontuario_Eletronico\5142\"
$LocArq = "$FullName\$TipoDoc" #monta local completo conforme matricula e tipdoc
$ArqAtu = $element.FullName #carrega local do arquivo atual do foreach
Copy-Item -Path $ArqAtu -Destination $LocArq -Force #copia o arquivo para o diretorio raiz
$Feito = 1 + $Feito
}
echo $Fim
Get-Date