Поиск и запуск файла - PullRequest
1 голос
/ 31 мая 2019

Я создаю сценарий, в котором он просматривает несколько вложенных папок, чтобы найти самую новую версию программного обеспечения в формате .msi. Мой код в настоящее время может найти файл и вывести его, но не может запустить файл.

Я могу использовать Select в последней строке для ForEach, чтобы вывести правильный файл, но когда я изменяю его на Start-Process, меня засыпают ошибками.

 $path="S:\\Releases\\Program"
 $NoOfDirs=Get-ChildItem $path -Directory

 ForEach($dir in $NoOfDirs){
     Get-ChildItem  "$path\$($dir.name)" -File -Recurse | 
     Where-Object {$_.LastWriteTime -gt ([DateTime]::Now.Adddays(-1))} | 
     Select-Object @{l='Folder';e={$dir.Name}},Name,LastWriteTime | 
     Sort-Object  -pro LastWriteTime -Descending |
     Start-Process -First 1
 }

Есть ли другая команда, которую я должен использовать при запуске MSI-файлов?

1 Ответ

2 голосов
/ 31 мая 2019

Так как ваш код должен "искать в куче вложенных папок" , я бы рекомендовал использовать переключатель -Recurse на Get-ChildItem. Также используйте параметр -Filter, чтобы ограничить поискв файлы .MSI.

Примерно так:

$path    = "S:\Releases\Program"
$refDate = (Get-Date).Adddays(-1)

Get-ChildItem -Path $path -Filter '*.msi' -File -Recurse | 
    Where-Object {$_.LastWriteTime -gt $refDate} | 
    ForEach-Object {
        # create the arguments for msiexec.exe.
        # to find out more switches, open a commandbox and type msiexec /?
        $msiArgs  = '/i', ('"{0}"' -f $_.FullName), '/qn', '/norestart'
        $exitCode = Start-Process 'msiexec.exe' -ArgumentList $msiArgs -NoNewWindow -Wait -PassThru
        if ($exitCode -ne 0) {
            # something went wrong. see http://www.msierrors.com/tag/msiexec-return-codes/
            # to find out what the error was.
            Write-Warning "MsiExec.exe returned error code $exitCode"
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...