Ранее я создал сценарий, который найдет последнюю сборку программного обеспечения и установит .msi, теперь, когда у меня установлена программа, я хотел бы найти программу на своем компьютере и открыть .exe.
Я считаю, что происходит то, что exe, который я пытаюсь запустить, имеет то же имя, что и во всех других папках сборки.
Я пробовал фильтровать элемент по дате несколькими способами. Ниже приведен текущий код, который я пробовал в последний раз:
$path = "C:\Program Files (x86)\Company"
$refDate = (Get-Date).Adddays(-30)
$filter = "app.exe"
&$latest = Get-ChildItem -Path $path -Filter $filter -File -Recurse | Where-Object {$_.LastWriteTime -gt $refDate}
Я хотел бы запустить правильный exe из соответствующей папки.
У меня есть апперсанд для запуска найденного файла. Я попробую это, хотя. Обновлено: я пробовал это, но он все еще дает ошибки, потому что .exe, который он находит, находится во многих других папках сборки в каталоге.
Как вы решаете, какой из них использовать, если их так много? Просто фильтр даты, который кажется недостаточным
Таким образом, $latest содержит не самый последний, а группу последних. Get-ChildItem -Path $path -Filter $filter -File -Recurse | Sort lastwritetime -Desc | Select -First 1 -Expand Fullname
Использовал это, чтобы настроить его, работает так, как я хотел. Спасибо!





Вот ответ @Matt, интегрированный в ваш скрипт.
$path = "C:\Program Files (x86)\Company"
$refDate = (Get-Date).Adddays(-30)
$filter = "app.exe"
$latest = Get-ChildItem -Path $path -Filter $filter -File -Recurse | Sort lastwritetime -Desc | Select -First 1 -Expand Fullname
& $latest
Попытка выполнить оператор присваивания (& $latest = ...) вместо переменной $latest могла быть причиной ошибки.
попробуйте это (с этим методом не найден исполняемый файл, у вас нет ошибки)
$path = "C:\Program Files (x86)\Company"
$filter = "app.exe"
Get-ChildItem $path -Filter $filter -File -Recurse -ErrorAction SilentlyContinue | Sort lastwritetime -Desc | Select -First 1 | %{& $_.FullName}
Удалите амперсанд из последней строки, которая у вас есть.
$latest— это объект, а не просто путь к файлу. На своей линии собственный& $latest.Fullname.