2015-02-17 3 views
0

Нижеприведенный скрипт проверяет файл по заданному пути. Сценарий возвращается, если найден какой-либо файл отсутствует. Я хотел бы завершить проверку всех указанных 4 файлов, а затем вернуться, если какой-либо из них отсутствует. Как мне нужно изменить код.Протокол проверки файлов Powershell

Также нужно захватить журналы в переменной для рассылки цели .. заранее спасибо ..

$LocalPath = "D:\Data\Inst" 
$paths = foreach($file in @("\abcd.exe", "\xyz.exe", "\IND\123.exe", "\ENG\987.exe")) 
{ 
"$LocalPath$file" 
} 

foreach ($fullpath in $paths) 
{ 
write-host "Varifying File : $fullpath" 
If (-not (Test-Path $fullpath -ErrorAction "SilentlyContinue")) 
{ 
write-host "`nFile varification $fullpath Failed.!! `a`n " 

return 
} 
ELSE 
{ 
write-host "$fullpath : is available `n" 
} 
} 
+0

Установите булевский флаг вместо возврата, а затем проверьте значение флага в конце скрипта – arco444

ответ

0

Я хотел бы сделать что-то вроде этого.

$LocalPath = "D:\Data\Inst" 
$paths = "\abcd.exe", "\xyz.exe", "\IND\123.exe", "\ENG\987.exe" | ForEach-Object{ 
    "$LocalPath$_" 
} 

$results = $paths | ForEach-Object{ 
    [pscustomobject][ordered]@{ 
     Path = $_ 
     Exists = Test-Path $_ -ErrorAction "SilentlyContinue" 
    } 
} 

if ($results.Exists -contains $False){ 
    $results | Where-Object{$_.Exists -eq $false} | ForEach-Object{ Write-Warning "$($_.Path) does not exists."} 
    return 
} Else { 
    Write-Host "All paths are present." 
} 

Проверьте каждый файл и запишите результат каждого тестового пути в пользовательскую переменную. Затем мы проверим, есть ли любые результатов: $False. Если один из них, то мы показываем тот, который не существует и не возвращается.

Возможно, в зависимости от ваших потребностей вы можете вывести переменную $results в файл сейчас.

$results | Export-CSV C:\temp\results.csv -NoTypeInformation 
0
# Files to check 
$ToCheck = @{'D:\Data\Inst' = @('abcd.exe', 'xyz.exe', 'IND\123.exe', 'ENG\987.exe')} 

# Check files 
$Log = $ToCheck.GetEnumerator() | 
      ForEach-Object { 
       foreach ($File in $_.Value){ 

        $CurrFile = Join-Path -Path $_.Key -ChildPath $File 
        "Verifying File : $CurrFile" 
        if(Test-Path -LiteralPath $CurrFile -PathType Leaf) 
        { 
         "$CurrFile : is available" 
        } 
        else 
        { 
         $FileMissing = $true 
         "File verification $CurrFile Failed.!!" 
        } 
       } 
      } 

# Send email 
if($FileMissing) 
{ 
    Send-MailMessage -SmtpServer 'mail.company.com' -From '[email protected]' -To '[email protected]' -Subject 'File status' -Body $Log 
} 
Смежные вопросы