PowerShell: Margus Nairis, AD-FindInstalledPrograms.ps1

From ICO wiki
Revision as of 16:19, 7 January 2012 by Mnairis (talk | contribs) (Created page with '<# .SYNOPSIS Leiab ActiveDirectoryst kõik masinad ja kontrollib kas nende installitud programmide seas on mõni otsitavat stringi sisaldav. .DESCRIPTION Leiab ActiveDir…')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

<# .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')
   
  1. >

param ( [Parameter(Position=0, Mandatory=$false)] [string] $FindString = "torrent" )

        1. See tingimus muutub mõtetuks, sest parameetris juba määratud vaikimisi väärtus.
  1. if($FindString -eq $null){
  2. $FindString = "torrent"
  3. }
  1. 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

  1. Branch of the Registry

$Branch='LocalMachine'

  1. 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