PowerShell: Margus Nairis, AD-FindInstalledPrograms.ps1
From ICO wiki
<#
.SYNOPSIS
Leiab ActiveDirectoryst kõik masinad ja kontrollib kas nende installitud programmide seas on mõni otsitavat stringi sisaldav.
.DESCRIPTION
Leiab ActiveDirectoryst kõik masinad ja kontrollib kas nende installitud programmide seas on mõni parameetriga määratud stringi sisaldava nimega.
Algselt püüdsin teha asja WMI objekti kasutades ent siis selgus, et Get-WmiObject -Class 'Win32_Product' -computerName $computer ei näita kõiki installitud programme vaid ainult msi installitud asju.
Seepärast on kasutatud registritest lugemist.
Autor: Margus Nairis AK41
.NOTES
Autor : Margus NAiris AK41
.LINK
http://itcollege.ee/~mnairis
.EXAMPLE
Kasutades ilma parameetrita otsib AD masinate seast installitud programme ja 'vilistab' kui leiaab mõne neist, mis sisaldab stringi 'torrent'.
PS> ADComputers_4.ps
Kasutades parameetriga FindString otsib AD masinate seast installitud programme ja
'vilistab' kui leiaab mõne neist, mis sisaldab parameetris kasutatud stringi.
Järgnevad kaks näidet leiavad näiteks Oracle Virtual Boxi masinatest.
PS> .\AD-FindInstalled.ps1 rtu
PS> .\AD-FindInstalled.ps1 -FindString rtu
.PARAMETER FindString
Peab olema string tüüpi, mitte kohustuslik (vaikimisi on siis 'torrent')
#>
param (
[Parameter(Position=0, Mandatory=$false)]
[string] $FindString = "torrent"
)
#### See tingimus muutub mõtetuks, sest parameetris juba määratud vaikimisi väärtus.
#if($FindString -eq $null){
# $FindString = "torrent"
#}
# impordin ActiveDirectory Mooduli Serveri jaoks.
Import-Module ActiveDirectory
$computers = Get-ADComputer -Filter *
$kogus = $computers.Length
$otsitav = $FindString
$loendur = 0
$compuArray = @()
Write-Host
Write-Host "Otsin installitud programme ja '" -NoNewline;
Write-Host " vilistan " -NoNewline -ForegroundColor red -BackgroundColor yellow;
Write-Host "' kui leian otsitavat stringi (" -NoNewline;
Write-Host $otsitav.ToLower() -ForegroundColor Yellow -NoNewline;
Write-Host ") sisaldava programmi."
Write-Host
Write-Host "ActiveDirectorys: " $kogus "masinat." -ForegroundColor Yellow
Write-Host "Ole kannatlik, kuniks kõik masinad on läbi käidud." -ForegroundColor Yellow
# Branch of the Registry
$Branch='LocalMachine'
# Main Sub Branch you need to open
$SubBranch="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
FOREACH ($pc in $computers)
{
write-host
write-host $kogus
write-host "Masin: " $pc.Name
try{
$registry=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$pc.Name)
}catch{}
$registrykey=$registry.OpenSubKey($Subbranch)
$SubKeys=$registrykey.GetSubKeyNames()
Foreach ($key in $subkeys)
{
$exactkey=$key
$NewSubKey=$SubBranch+"\\"+$exactkey
$ReadUninstall=$registry.OpenSubKey($NewSubKey)
$Value=$ReadUninstall.GetValue("DisplayName")
if($Value -ne $null){
if( !$Value.ToLower().Contains($otsitav.ToLower()) ){
Write-Host "Installitud: " $Value
}
if( $Value.ToLower().Contains($otsitav.ToLower()) ){
#Write-Host $pc.Name "Sisaldab installitud programmide hulgas otsitava stringiga ($otsitav) programmi!" -foregroundcolor red -backgroundcolor yellow
Write-Host "Leitud Sobivus : " -NoNewline; Write-Host $Value -foregroundcolor red -backgroundcolor yellow
$loendur ++
if( $compuArray -notContains $pc.Name ){
$compuArray += $pc.Name
}
}
}
}
$kogus --
}
Write-Host
Write-Host "Otsimine lõpetatud, leitud $loendur sobivust järgmistes masinates:" -ForegroundColor yellow
foreach($compu in $compuArray){
Write-Host $compu -ForegroundColor red
}
Write-Host
exit