Я не совсем новичок в PS, но я беру все это на работу без направления, что усложняет обучение, поскольку есть вещи, о которых я не знаю, которых я не знаю. При этом у меня есть полностью функционирующий сценарий, и я хотел бы получить указатели о том, как сделать это быстрее или, возможно, получить совершенно другой способ сделать это.
Проблема:
У меня есть куча фотографий в папке, которые мне нужно сравнить со списком идентификаторов из таблицы SQL. Если я найду совпадение, мне нужно переместить эту фотографию в другой каталог для обработки
Я знаю, что это неэффективно, так как я вызываю каталог на каждой итерации цикла ID, но я не смог заставить его работать, если я попытался также создать массив файлов для проверки, а затем сравнить два массива.
Опять же, функциональность отличная, просто она не быстрая.
CLS
$startDate = Get-Date
$startDate
$photoSourceLocation = "C:\Temp\Photos\Aggregate" #"C:\Temp\Photos\Moved"
$photoDropLocation = "C:\Temp\Photos\Process"
$IdQuery = "SELECT ST.Id FROM SomeTable as ST"
$patients = Invoke-Sqlcmd -Query $IdQuery -ServerInstance "SQLServer" -Database "DB"
$photos = GCI $photoSourceLocation -File
$patientRaw = $patients | Measure
$patientCount = $patientRaw.Count
#$PatientCount
$I = 1
$Out= ""
forEach ($patient in $Patients)
{
$MovePhoto = GCI $photoSourceLocation -File | Where-Object {$_.BaseName -contains $patient.Id}
if($MovePhoto)
{
Move-Item $movePhoto.FullName -Destination $photoDropLocation
}
#$MovePhoto.FullName
Write-Progress -Activity "Processing photo matches." -Status "Progress:" -PercentComplete ($I/$patientRaw.count*100) #-End $Out
$I++
}
$endDate = Get-Date
$endDate