Да, вы можете удаленно проверить, установлено ли программное обеспечение или нет:
# We need to check for both 64-bit and 32-bit software
$regPaths = "HKLM:\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
# Get the name of all installed software registered in the registry with Office in the name
# (you can search for exact strings if you know them for specific versions)
$regPaths | Foreach-Object {
( Get-ItemProperty "${_}\*" DisplayName -EA SilentlyContinue ).DisplayName | Where-Object {
$_ -match 'ADD_REMOVE_PROGRAMS_NAME'
}
}
Как это работает, он проверяет 32- и 64-битные реестры на наличие установленного программного обеспечения. Под строкой $_ -match 'ADD_REMOVE_PROGRAMS_NAME'
следует заменить ADD_REMOVE_PROGRAMS_NAME
на любое имя программного обеспечения в «Установка и удаление программ». Обратите внимание, что этот метод не работает с некоторыми программами, которые устанавливаются с помощью установщиков на основе EXE.
Вы также можете запускать это удаленно на нескольких компьютерах, используя Invoke-Command
:
$computers = Get-Content "C:\Path\To\File\With\Computer_Names.txt"
$results = Invoke-Command -ComputerName $computers {
# We need to check for both 64-bit and 32-bit software
$regPaths = "HKLM:\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
# Get the name of all installed software registered in the registry with Office in the name
# (you can search for exact strings if you know them for specific versions)
$regPaths | Foreach-Object {
( Get-ItemProperty "${_}\*" DisplayName -EA SilentlyContinue ).DisplayName | Where-Object {
$_ -match 'ADD_REMOVE_PROGRAMS_NAME'
}
}
}
Invoke-Command
может запускать встроенный ScriptBlock
на многих компьютерах одновременно. Когда все компьютеры в списке выполнили команду, вы можете проверить результат для каждого компьютера (он возвращается как массив, чтобы вы могли проверить свойство PSCOMPUTERNAME
на каждом $result
, чтобы увидеть, на каких компьютерах нет программного обеспечения. Как работает приведенный выше код, он должен возвращать объект на компьютерах, на которых он есть, и ничего на компьютерах, на которых его нет.