Использование сценария в PowerShell для рекурсивного прохождения через все папки в нескольких ящиках NAS для отображения каждой папки с полным путем в Out-File
. С помощью сценария Get-FolderEntry
я нашел here.Использование Start-Job по сценарию
Поскольку у меня есть несколько ящиков NAS с более чем 260 символами в имени файла/пути, я решил, что буду использовать многопоточность, чтобы ускорить процесс.
Код:
. C:\Users\mdevogea\Downloads\Get-FolderEntry.ps1
# list with the servers
$Computers = Get-Content C:\Users\mdevogea\Desktop\servers.txt
# scriptblock calling on get-FolderEntry
$sb = {
param ($Computer, $fname)
C:\Users\mdevogea\Downloads\Get-FolderEntry.ps1 -Path $Computer |
fl | Out-File -Append -Width 1000 -FilePath $fname
}
foreach($Computer in $Computers)
{
$name = $Computer.Replace("\", "")
$fname = $("C:\Users\mdevogea\Desktop\" + $name + ".txt")
#Get-FolderEntry -Path $Computer | fl | Out-File -Append -Width 1000 $fname
$res = Start-Job $sb -ArgumentList $Computer, $fname
}
# Wait for all jobs
Get-Job
while(Get-Job -State "Running")
{
Write-Host "Running..."
Start-Sleep 2
}
# Get all job results
Get-Job | Receive-Job | Out-GridView
До сих пор:
я либо получить пустые файлы с правильным наименованием файла.
Я получаю правильный именованный файл с кодом
Get-FolderEntry
.Я получаю ошибки в зависимости от того, что я передаю скриптблоку.
Короче говоря, это, наверное, глупо, но не видит.
Внутри скриптового блока first dot-source * script * 'Get-FolderEntry.ps1', затем вызывается функция *' Get-FolderEntry'. Если это не поможет показать ошибки, которые вы получаете. –
Предполагаю, вы имеете в виду вот так: $ sb = {. C: \ Users \ mdevogea \ Downloads \ Get-FolderEntry.ps1 param ($ Computer, $ fname) C: \ Users \ mdevogea \ Downloads \ Get-FolderEntry.ps1 -Path $ Компьютер | fl | Out-File -Append -Width 1000 -FilePath $ имя_файла } если да, то это ошибка: Невозможно привязать аргумент параметра «FilePath», поскольку он является недействительным. + CategoryInfo: InvalidData: (:) [Out-File], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationErrorNullNotAllowed, Microsoft.PowerShell.Commands.OutFileCommand + PsComputerName: локальный – Michael
Параметр 'Param()' оператор должен быть первым. Затем точка-источник. И вы * все еще * запускаете * скрипт * вместо * функции *. –