Перед запуском скрипта проверьте наличие нескольких путей к файлам - PullRequest
1 голос
/ 22 апреля 2020

Мне нужно проверить, что у меня есть все файлы, прежде чем запускать остальную часть моего сценария powershell. Каков лучший способ go с помощью приведенного ниже кода и после того, как он найдет каждый требуемый файл, продолжите работу с остальной частью моего сценария. Или, если какой-либо из файлов не найден, я отправляю уведомление по электронной почте вместе с выходом из сценария.

# collect log one
if (Test-Path $logone) {
    $one = Import-Csv -Path $logone
    Write-Host "Log one found"
}
else {
    #Send email "Log one not found!"
    Write-Host "Log one not found!"
}
# collect log two
if (Test-Path -Path $logtwo) {
    $two = Import-Csv -Path $logtwo 
    Write-Host "Log two found"
}
else {
    #Send email "Log two not found!"
    Write-Host "Log two not found!"
}
# collect log three data
if (Test-Path -Path $logthree) {
    $three = Import-Csv -Path $logthree 
    Write-Host "Log three found"
}
else {
    #Send email "Log three not found!"
    Write-Host "Log three not found!"
}

Могу ли я просто добавить следующий код ниже того, что у меня есть:

if (Test-Path $logone) -and (Test-Path $logtwo) -and (Test-Path $logthree) {
# continue with the rest of my code
}
else {
Write-Host "Script exited with error"
Exit
}

Есть ли более чистый способ сделать это?

1 Ответ

1 голос
/ 22 апреля 2020

На основании ответа IT Delinquent приведен пример того, как этого добиться:

$logOne = "C:\Temp\log1"
$logTwo = "C:\Temp\log2"
$logThree = "C:\Temp\log3"
$mandatoryLogs = $logOne,$logTwo,$logThree
$errors = @()
$count = 0
$logs = @{}

foreach($log in $mandatoryLogs){
    $count++
    if(Test-Path $log){
        $logs["log$count"] = Import-Csv -Path $log
        Write-Host "Log $count found!"
    }else{
        $errors += "$log is missing"
    }
}

if($errors){
    $body = @"
Dear Admin,

The following errors occured: $($errors | Out-String)

Regards
"@
    try{
        Send-MailMessage -Body $body # -To -From etc etc
    }catch{
        throw $_
    }
    throw "Quiting because of errors, mail has been sent"
}else{
    Write-Host "Continuing script" -ForegroundColor Green
}

Далее вы можете получить доступ к каждому из журналов следующим образом:

$logs['log1']

Или:

Write-Host "$($logs['log3'].randomPropertyWhichExistsInTheCSV)"

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...