unique24
Goto Top

Teamviewer Ausrollung

Hallo,
ich möchte gerne den TeamViewer Host ausrollen. Anleitung wäre hier:
https://winxperts4all.at/index.php/software/1725-teamviewer-im-netzwerk- ...
start /wait %WD%\TeamViewer_Host_Setup.exe /S
regedit.exe /s %WD%\Teamviewer_Settings.reg
net stop TeamViewer
net start Teamviewer
del "%Public%\Desktop\Teamviewer*.Ink"  

Ich möchte aber das Script nur starten, wenn Teamviewer nicht installiert ist. Hier ist mein Problem:
Ich muss einen Reg Wert abrufen und wenn dieser nicht existiert, das Script als Admin bei Computerstart starten.

REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\TeamViewer.exe\ /v AppID
Da bekomme ich zurück:
    AppID    REG_SZ    {850A928D-5456-4865-BBE5-42635F1EBCA1}

Wie könnte ich in einer batch Datei prüfen ob der Reg Wert gültig ist?

Danke!

Content-ID: 613113

Url: https://administrator.de/contentid/613113

Printed on: October 15, 2024 at 02:10 o'clock

chkdsk
chkdsk Oct 15, 2020 at 05:43:26 (UTC)
Goto Top
Moin,
wenn du Zugriff auf die GPOs hast, roll das damit aus, ansonsten mach das ganze gleich mit der Powershell. Einfach im Skript mit überprüfen ob der Prozess von Teamviewer läuft.
Meierjo
Meierjo Oct 15, 2020 at 06:16:58 (UTC)
Goto Top
Hallo

Wie könnte ich in einer batch Datei prüfen ob der Reg Wert gültig ist?

Willst du auf einen gültigen Wert prüfen, oder auf das Vorhanden-, oder Nichtvorhandensein einen Schlüssels?
Wie würde ein gültiger / ungültiger Wert aussehen

Gruss
emeriks
emeriks Oct 15, 2020 at 06:46:30 (UTC)
Goto Top
Hi,
Zitat von @chkdsk:
Einfach im Skript mit überprüfen ob der Prozess von Teamviewer läuft.
Und wenn er nicht läuft, dann ist das kein eindeutiges Indiz, ob installiert oder nicht. Also nutzlos.
chkdsk
chkdsk Oct 15, 2020 at 06:56:48 (UTC)
Goto Top
Stimmt. Da hast du natürlich recht. Es muss also vorher überprüft werden, ob Teamviewer wirklich installiert ist.
emeriks
emeriks Oct 15, 2020 updated at 07:03:17 (UTC)
Goto Top
Aber man könnte abfragen, ob der entsprechende Dienst installiert ist. Das ist dann zwar immer noch nicht ein 100% Indiz dafür, ob "richtig" installiert, aber schon mal eins, welches nah dran ist. Außerdem müsste man noch die Version abfragen.
chkdsk
chkdsk Oct 15, 2020 updated at 07:20:54 (UTC)
Goto Top
Hier mal als Beispiel für den TO. Kann man mit Sicherheit noch ausbauen.

Skript als .ps1 abspeichern. Im Verzeichnis dann
. .\Get-RemoteProgram.ps1 -computername "hier pc eintragen" -includeprogram *team*  


[CmdletBinding(SupportsShouldProcess=$true)]
    param(
        [Parameter(ValueFromPipeline              =$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0
        )]
        [string[]]
            $ComputerName = $env:COMPUTERNAME,
        [Parameter(Position=0)]
        [string[]]
            $Property,
        [string[]]
            $IncludeProgram,
        [string[]]
            $ExcludeProgram,
        [switch]
            $ProgramRegExMatch,
        [switch]
            $LastAccessTime,
        [switch]
            $ExcludeSimilar,
        [switch]
            $DisplayRegPath,
        [switch]
            $MicrosoftStore,
        [int]
            $SimilarWord
    )

    begin {
        $RegistryLocation = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\',  
                            'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'  

        if ($psversiontable.psversion.major -gt 2) {
            $HashProperty = [ordered]@{}    
        } else {
            $HashProperty = @{}
            $SelectProperty = @('ComputerName','ProgramName')  
            if ($Property) {
                $SelectProperty += $Property
            }
            if ($LastAccessTime) {
                $SelectProperty += 'LastAccessTime'  
            }
        }
    }

    process {
        foreach ($Computer in $ComputerName) {
            try {
                $socket = New-Object Net.Sockets.TcpClient($Computer, 445)
                if ($socket.Connected) {
                    'LocalMachine', 'CurrentUser' | ForEach-Object {  
                        $RegName = if ('LocalMachine' -eq $_) {  
                            'HKLM:\'  
                        } else {
                            'HKCU:\'  
                        }

                        if ($MicrosoftStore) {
                            $MSStoreRegPath = 'Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages\'  
                            if ('HKCU:\' -eq $RegName) {  
                                if ($RegistryLocation -notcontains $MSStoreRegPath) {
                                    $RegistryLocation = $MSStoreRegPath
                                }
                            }
                        }
                        
                        $RegBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::$_,$Computer)
                        $RegistryLocation | ForEach-Object {
                            $CurrentReg = $_
                            if ($RegBase) {
                                $CurrentRegKey = $RegBase.OpenSubKey($CurrentReg)
                                if ($CurrentRegKey) {
                                    $CurrentRegKey.GetSubKeyNames() | ForEach-Object {
                                        Write-Verbose -Message ('{0}{1}{2}' -f $RegName, $CurrentReg, $_)  

                                        $DisplayName = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('DisplayName')  
                                        if (($DisplayName -match '^@{.*?}$') -and ($CurrentReg -eq $MSStoreRegPath)) {  
                                            $DisplayName = $DisplayName  -replace '.*?\/\/(.*?)\/.*','$1'  
                                        }

                                        $HashProperty.ComputerName = $Computer
                                        $HashProperty.ProgramName = $DisplayName
                                        
                                        if ($DisplayRegPath) {
                                            $HashProperty.RegPath = '{0}{1}{2}' -f $RegName, $CurrentReg, $_  
                                        } 

                                        if ($IncludeProgram) {
                                            if ($ProgramRegExMatch) {
                                                $IncludeProgram | ForEach-Object {
                                                    if ($DisplayName -notmatch $_) {
                                                        $DisplayName = $null
                                                    }
                                                }
                                            } else {
                                                $IncludeProgram | Where-Object {
                                                    $DisplayName -notlike ($_ -replace '\[','`[')  
                                                } | ForEach-Object {
                                                        $DisplayName = $null
                                                }
                                            }
                                        }

                                        if ($ExcludeProgram) {
                                            if ($ProgramRegExMatch) {
                                                $ExcludeProgram | ForEach-Object {
                                                    if ($DisplayName -match $_) {
                                                        $DisplayName = $null
                                                    }
                                                }
                                            } else {
                                                $ExcludeProgram | Where-Object {
                                                    $DisplayName -like ($_ -replace '\[','`[')  
                                                } | ForEach-Object {
                                                        $DisplayName = $null
                                                }
                                            }
                                        }

                                        if ($DisplayName) {
                                            if ($Property) {
                                                foreach ($CurrentProperty in $Property) {
                                                    $HashProperty.$CurrentProperty = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue($CurrentProperty)  
                                                }
                                            }
                                            if ($LastAccessTime) {
                                                $InstallPath = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('InstallLocation') -replace '\\$',''  
                                                if ($InstallPath) {
                                                    $WmiSplat = @{
                                                        ComputerName = $Computer
                                                        Query        = $("ASSOCIATORS OF {Win32_Directory.Name='$InstallPath'} Where ResultClass = CIM_DataFile")  
                                                        ErrorAction  = 'SilentlyContinue'  
                                                    }
                                                    $HashProperty.LastAccessTime = Get-WmiObject @WmiSplat |
                                                        Where-Object {$_.Extension -eq 'exe' -and $_.LastAccessed} |  
                                                        Sort-Object -Property LastAccessed |
                                                        Select-Object -Last 1 | ForEach-Object {
                                                            $_.ConvertToDateTime($_.LastAccessed)
                                                        }
                                                } else {
                                                    $HashProperty.LastAccessTime = $null
                                                }
                                            }

                                            if ($psversiontable.psversion.major -gt 2) {
                                                [pscustomobject]$HashProperty
                                            } else {
                                                New-Object -TypeName PSCustomObject -Property $HashProperty |
                                                Select-Object -Property $SelectProperty
                                            }
                                        }
                                        $socket.Close()
                                    }

                                }

                            }

                        }
                    }
                }
            } catch {
                Write-Error $_
            }
        }
    }
}
unique24
unique24 Oct 15, 2020 at 08:43:26 (UTC)
Goto Top
Super, herzlichen Dank!

ich habe es aber nicht geschafft, die Funktion mit einer If auszuwerten.
Wenn nichts zurück kommt, ist es nicht installiert und sonst ist es installiert.

Könntest du mir bitte dahingehend nochmal kurz helfen?

Danke!
mayho33
mayho33 Oct 15, 2020 at 15:39:53 (UTC)
Goto Top
Schau doch unter HKLM\Software\Microsoft\Windows\Current version\Uninstall\<Product Code> nach.

Wenn das Produkt installiert ist, lässt es sich da finden.

Grüße!