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- ...
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.
Da bekomme ich zurück:
Wie könnte ich in einer batch Datei prüfen ob der Reg Wert gültig ist?
Danke!
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
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!
Please also mark the comments that contributed to the solution of the article
Content-ID: 613113
Url: https://administrator.de/contentid/613113
Printed on: October 15, 2024 at 02:10 o'clock
8 Comments
Latest comment
Hi,
Und wenn er nicht läuft, dann ist das kein eindeutiges Indiz, ob installiert oder nicht. Also nutzlos.
Und wenn er nicht läuft, dann ist das kein eindeutiges Indiz, ob installiert oder nicht. Also nutzlos.
Hier mal als Beispiel für den TO. Kann man mit Sicherheit noch ausbauen.
Skript als .ps1 abspeichern. Im Verzeichnis dann
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 $_
}
}
}
}