Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/23: Рейтинг темы: голосов - 23, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53

Дата установленных программ для сравнения и вывода в файл

14.02.2021, 04:57. Показов 5405. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно чтобы скрипт выводил в файл список установленного на данный компьютер ПО
(Get-WmiObject win32_product) по годам ,чтобы пользователь мог сам задать год и при этом был вывод в файл - с разделением по годам - в каком году какие программы ставились

PowerShell
1
2
3
4
5
6
Clear-host
write-host "введите год"
$n= Read-Host  
 
$name = (Get-WmiObject  Win32_product | Select-Object installdate, name | Sort-Object -property name) 
Read-Host "$name"
Пока с помощью интернета осилил только такое...... а дальше затык....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2021, 04:57
Ответы с готовыми решениями:

Bat-файл для вывода списка установленных программ
В cmd это делается в следующей последовательности: 1. вводится команда wmic; 2. вводится команда product get name,version (для...

Записть список установленных программ в файл
Доброго всем дня. Подскажите как вывести данные в файл а не в консоли. Заранее спасибо! using System; using System.Management; ...

Копирование списка установленных программ в текстовый файл
Кто подскажет как список установленных программ из меню "Установка и удаление" скопировать в текстовый файл. Спасибо

34
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
15.02.2021, 03:26  [ТС]
Студворк — интернет-сервис помощи студентам
а у меня и на него ошибка сразу вышла

PS C:\Windows\system32> Get-WmiObject Win32_product|?installdate
?installdate : Имя "?installdate" не распознано как имя командлета, функции, файла сценария или вып
олняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, по
сле чего повторите попытку.
строка:1 знак:30
+ Get-WmiObject Win32_product|?installdate
+ ~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (?installdate:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Добавлено через 1 минуту
не может быть все дело в том, что ВИНДА 64 БИТ ? или нет ???
0
 Аватар для volodin661
7151 / 2339 / 353
Регистрация: 10.12.2013
Сообщений: 8,109
15.02.2021, 03:28
не. просто пробелом отбить после |?

PowerShell
1
Get-WmiObject Win32_product|? installdate
1
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
15.02.2021, 03:30  [ТС]
Цитата Сообщение от Fors1k Посмотреть сообщение
param(
    [int]$y  = 2021,
    $pathOut = "D:\products.txt"
)cls
$p = Get-WmiObject Win32_product|?{$_.installdate}
function Check-Year{[datetime]::ParseExact($args[0], "yyyyMMdd", $null).Year -eq $args[1]}
$p |% {if(Check-Year $_.installdate  $y   ){[pscustomobject]@{ $y    = $_.name}}}|Out-File $pathOut
$p |% {if(Check-Year $_.installdate ($y-1)){[pscustomobject]@{($y-1) = $_.name}}}|Out-File $pathOut -a
$p |% {if(Check-Year $_.installdate ($y-2)){[pscustomobject]@{($y-2) = $_.name}}}|Out-File $pathOut -a
start $pathOut

Вот сейчас все прошло без ошибок и файл сам открылся !
0
 Аватар для volodin661
7151 / 2339 / 353
Регистрация: 10.12.2013
Сообщений: 8,109
15.02.2021, 03:32
мне опыт Perl мешает, там сумасшедший парсер, можно абсолютно всё слитно рисовать ))
0
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
15.02.2021, 03:39  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
1
Get-WmiObject Win32_product|? installdate
вы правы, все дело в одном пробеле как оказалось .. (ох же я и тупенький, но это пока что)

Добавлено через 7 минут
Цитата Сообщение от Fors1k Посмотреть сообщение
$p |% {if(Check-Year $_.installdate  $y   ){[pscustomobject]@{ $y    = $_.name}}}|Out-File $pathOut
$p |% {if(Check-Year $_.installdate ($y-1)){[pscustomobject]@{($y-1) = $_.name}}}|Out-File $pathOut -a
$p |% {if(Check-Year $_.installdate ($y-2)){[pscustomobject]@{($y-2) = $_.name}}}|Out-File $pathOut -a
start $pathOut
помогите немножко разобраться- как мне это все теперь к заданию приделать, чтобы файл получился как в задании с разделением
Я так думаю это надо все как-то по очереди туда подгружать ?
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
15.02.2021, 03:47
Цитата Сообщение от leksan777 Посмотреть сообщение
как мне это все теперь к заданию приделать, чтобы файл получился как в задании с разделением
Этот код выводит список с разделением по годам как в задании.
0
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
15.02.2021, 03:51  [ТС]
А, куда добавить надписи
Установлено в текущем ПГОД году
Установлено в предыдущем ПЕРЕДПГОД году
Установлено до ПЕРЕДПГОД года
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
15.02.2021, 03:56
Лучший ответ Сообщение было отмечено leksan777 как решение

Решение

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
param( 
    [int]$y  = 2021, 
    $pathOut = "D:\products.txt"
)cls
 
$p = Get-WmiObject Win32_product|?{$_.installdate}
 
function Check-Year{[datetime]::ParseExact($args[0], "yyyyMMdd", $null).Year -eq $args[1]}
 
$p |% {if(Check-Year $_.installdate  $y   ){[pscustomobject]@{"Установлено в текущем $y году" = $_.name}}}|Out-File $pathOut
$p |% {if(Check-Year $_.installdate ($y-1)){[pscustomobject]@{"Установлено в предыдущем $($y-1) году" = $_.name}}}|Out-File $pathOut -a
$p |% {if(Check-Year $_.installdate ($y-2)){[pscustomobject]@{"Установлено до $($y-1) года" = $_.name}}}|Out-File $pathOut -a
1
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
15.02.2021, 04:03  [ТС]
Цитата Сообщение от Fors1k Посмотреть сообщение
param(
    [int]$y  = 2021,
    $pathOut = "D:\products.txt"
)cls
$p = Get-WmiObject Win32_product|?{$_.installdate}
function Check-Year{[datetime]::ParseExact($args[0], "yyyyMMdd", $null).Year -eq $args[1]}
$p |% {if(Check-Year $_.installdate  $y   ){[pscustomobject]@{"Установлено в текущем $y году" = $_.name}}}|Out-File $pathOut
$p |% {if(Check-Year $_.installdate ($y-1)){[pscustomobject]@{"Установлено в предыдущем $($y-1) году" = $_.name}}}|Out-File $pathOut -a
$p |% {if(Check-Year $_.installdate ($y-2)){[pscustomobject]@{"Установлено до $($y-1) года" = $_.name}}}|Out-File $pathOut -a
СПАСИБО !!!!!!!!!!!!
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
15.02.2021, 04:05
Лучший ответ Сообщение было отмечено leksan777 как решение

Решение

leksan777, вам, видимо, так нужно:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
param( 
    [int]$y  = 2021, 
    $pathOut = "D:\products.txt"
)cls
 
$p = Get-WmiObject Win32_product|?{$_.installdate}
 
$p |% {if([datetime]::ParseExact($_.installdate, "yyyyMMdd", $null).Year -eq $y){
[pscustomobject]@{"Установлено в текущем $y году" = $_.name}}}|Out-File $pathOut
 
$p |% {if([datetime]::ParseExact($_.installdate, "yyyyMMdd", $null).Year -eq $y-1){
[pscustomobject]@{"Установлено в предыдущем $($y-1) году" = $_.name}}}|Out-File $pathOut -a
 
$p |% {if([datetime]::ParseExact($_.installdate, "yyyyMMdd", $null).Year -lt $y-1){
[pscustomobject]@{"Установлено до $($y-1) года" = $_.name}}}|Out-File $pathOut -a
1
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
15.02.2021, 04:12  [ТС]
Скорее всего да.
Я даже до функции сам доделал (благо уже разобрался с этим)
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
15.02.2021, 08:32
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Function foo {
    param(
        [System.IO.FileInfo][String]$outFileName = "d:\tmp\out.txt"
    )
    try {
        $dt = [datetime]::ParseExact((Read-Host "Type year please"), "yyyy", $null)
        $userInputYear = $dt.Year
        $userInputYearMinusOne = $dt.AddYears(-1).Year
    }
    catch {
        write-error "I can't determine the date"
        break 
    }
 
    $array = Get-CimInstance Win32_product | ForEach-Object {
        try {
            [PSCustomObject]@{
                name        = $_.name
                installdate = [datetime]::ParseExact($_.installdate, "yyyyMMdd", $null)
            }    
        }
        catch {
            $null
        }
    }
    $out = ""
    $array |
    Group-Object {
        switch ($_.installdate.Year) {
            $userInputYear { "0_$userInputYear" }
            $userInputYearMinusOne { "1_$userInputYearMinusOne" }
            default { "3_other years" }
        }
    } | Sort-Object name |
    ForEach-Object {
        $out += "Software installed in {0}`r`n" -f $_.Name.Split("_")[1]
        $_.Group | ForEach-Object {
            $out += "`t{0,-80}, {1:dd.MM.yyyy}`r`n" -f $_.Name, $_.installdate
        }
    }
    $out
}
 
 
foo | Out-File
Пара моментов

Цитата Сообщение от Fors1k Посмотреть сообщение
$p = Get-WmiObject Win32_product|?{$_.installdate}
если значения поля не будут исчерпываться строкой с валидной датой и ничем, то этого не достаточно.

сортировка сначала год введенный пользователем, потом год минус, потом уже все остальные включая и те что старше.

Добавлено через 3 часа 9 минут
Наверное все таки порядок сортировки лучше вынести в отдельное поле.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Function foo {
    param(
        [System.IO.FileInfo][String]$outFileName = "d:\tmp\out.txt"
    )
    try {
        $dt = [datetime]::ParseExact((Read-Host "Type year please"), "yyyy", $null)
        $userInputYear = $dt.Year
        $userInputYearMinusOne = $dt.AddYears(-1).Year
    }
    catch {
        write-error "I can't determine the date"
        break 
    }
 
    $array = Get-CimInstance Win32_product | ForEach-Object {
        try {
            [PSCustomObject]@{
                name        = $_.name
                installdate = [datetime]::ParseExact($_.installdate, "yyyyMMdd", $null)
                year = ([datetime]::ParseExact($_.installdate, "yyyyMMdd", $null)).Year
            }    
        }
        catch {
            $null
        }
    }
    $out = ""
    $array |
    Group-Object {$_.Year} | ForEach-Object{
        [PSCustomObject]@{
            name = $_.Name
            sortOrder = switch ($_.Name) {
                $userInputYear {0}
                $userInputYearMinusOne {1}
                default {2}
            }
            group = $_.Group
        }
    } | Sort-Object sortOrder |
    ForEach-Object {
        $out += "Software installed in {0}`r`n" -f $_.Name
        $_.Group | ForEach-Object {
            $out += "`t{0,-80} {1:dd.MM.yyyy}`r`n" -f $_.Name, $_.installdate
        }
    }
    $out
}
 
foo
Добавлено через 30 секунд
а значение года добавить к извлекаемым объектам
1
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
15.02.2021, 16:38  [ТС]
Я вечером только смогу проверить - как работает.
На работе Политика Безопасности не дает PS ISE запускать, и в файл через скрипты записи делать на рабочем месте
Дома вроде все нормально в файл дописывалось- а в офисе - до файла ничего не доходит
А подскажите сразу еще - файл уже должен быть по указанному пути и каталогу или я сначала должен его там создать ?
0
1659 / 274 / 66
Регистрация: 03.06.2020
Сообщений: 707
15.02.2021, 18:19
Цитата Сообщение от leksan777 Посмотреть сообщение
Нужно чтобы скрипт выводил в файл список установленного на данный компьютер ПО
У меня список на пару строк, а программ на два порядка больше. Как вы узнаете, что и как в хомяке пользователя, который соорудил окружение с своими переменными, не записанными в реестр, которые просто динамические? Помню, давно, работал в одной конторе, они, (одмины), каждую ночь накидывали изначальный образ ОС, а текущие документы хранились где-то у них, и все было под полным контролем. Флешку не вставишь, в интернет по приказу...
0
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 53
16.02.2021, 00:03  [ТС]
Согласен с вами, но такое задание выдали. Я тоже не очень понимяю его суть, но если только сверять программы, которые были установлены именно через Windows-installer

Добавлено через 2 часа 51 минуту
Цитата Сообщение от lesser Посмотреть сообщение
У меня список на пару строк, а программ на два порядка больше.
Но это просто задание, и я не думаю, что оно на практике будет где-то использовано именно в таком виде.
Тем более что это только те программы, которые ставились через WinInstaller, а есть еще Портативные, и те, которые не прописываются особо никуда. Те вообще этими методами не отследить, если только екзешники искать и из них пытаться инфу взять...

Добавлено через 2 часа 7 минут
Узнал в процессе проверки, что на выполнение скрипта могут очень влиять настройки безопасности на компе....
Иногда они просто не дают создавать файл с данными......
Скрипт просто зависает и молчит ....
Не все Лабы про Политики Безопасности проходят без последствий
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.02.2021, 00:03

Как получить список установленных программ в текстовый файл?
Как получить список установленных программ (а точнее .exe файлов запускников) в текстовый файл, при этом добавить перед ними в каждой...

Как получить список всех установленных программ с ссылками на их исполняемый файл?
Добрый день. Необходимо узнать название всех установленных приложений в Windows и пути к их исполняемым файлам. В поисках решения данной...

Распаковка/упаковка установленных программ для освобождения места на системном диске
Доброго, используются программы в установленном виде весят около 30 ГБ и более. Системный диск - ssd на 240 ГБ - мест не хватает. Программы...

В панели управления в меню "Установка и удаление программ"пропали значки установленных программ
Таже самая беда. В панели управления в меню "Установка и удаление программ"пропали значки установленных программ, три значка осталось, хотя...

Запуск программ с перенаправлением вывода в файл
Доброй ночи. Столкнулся с проблемой запуска программы с перенаправлением вывода в файл(.exe), какие мысли на счёт такого?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru