PowerShell: Margus Nairis, AD-FindInstalledPrograms.ps1: Difference between revisions

From ICO wiki
Jump to navigationJump to search
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…'
 
Mnairis (talk | contribs)
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
<source lang="powershell">
<#
<#
.SYNOPSIS
.SYNOPSIS
     Leiab ActiveDirectoryst kõik masinad ja kontrollib kas nende installitud programmide seas on mõni otsitavat stringi sisaldav.
     Leiab ActiveDirectoryst kõik masinad ja kontrollib kas nende installitud programmide seas on mõni otsitavat stringi sisaldav.
    Katsetatud Windows Server 2008 R2 peal, mille test-domeeni kliendiks Windows 7 proffessional (MSDNA).
    Kasutatud just Windows serveritele mõeldud AD moodulit, mis imporditakse.


.DESCRIPTION
.DESCRIPTION
Line 65: Line 69:
Write-Host "Ole kannatlik, kuniks kõik masinad on läbi käidud." -ForegroundColor Yellow
Write-Host "Ole kannatlik, kuniks kõik masinad on läbi käidud." -ForegroundColor Yellow


# Branch of the Registry
# määran registri peaharu
$Branch='LocalMachine'  
$Branch='LocalMachine'  


# Main Sub Branch you need to open
# määran registri alamharu
$SubBranch="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
$SubBranch="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"


Line 118: Line 122:
Write-Host
Write-Host
exit
exit
</source>

Latest revision as of 16:28, 7 January 2012

<#
.SYNOPSIS
    Leiab ActiveDirectoryst kõik masinad ja kontrollib kas nende installitud programmide seas on mõni otsitavat stringi sisaldav.
    Katsetatud Windows Server 2008 R2 peal, mille test-domeeni kliendiks Windows 7 proffessional (MSDNA).
    Kasutatud just Windows serveritele mõeldud AD moodulit, mis imporditakse.

.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

# määran registri peaharu 
$Branch='LocalMachine' 

# määran registri alamharu
$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