-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTest-ServiceOnMultipleClients.ps1
More file actions
112 lines (91 loc) · 3.65 KB
/
Copy pathTest-ServiceOnMultipleClients.ps1
File metadata and controls
112 lines (91 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<#
.SYNOPSIS
Prueft auf mehreren Rechnern, ob mindestens einer aus einer Liste von
Diensten laeuft.
.DESCRIPTION
Geht eine Rechnerliste durch und meldet je Rechner, welcher der
gesuchten Dienste vorhanden und in welchem Zustand er ist. Die Dienste
sind oder-verknuepft: gedacht fuer Produkte, die je nach Version
unterschiedliche Dienstnamen mitbringen.
Im Auslieferungszustand sind die Dienste einer G-DATA-Installation
hinterlegt.
.NOTES
Dienstliste und Titel stehen als Variablen am Dateianfang. Nicht
erreichbare Rechner werden als solche ausgewiesen und nicht
stillschweigend uebergangen.
#>
param (
$Computer = @()
)
# Annahme: $Computer ist eine Liste/Array von Computernamen
# z.B. $Computer = "PC1", "PC-Offline", "PC3"
$title = "GDATA Checks"
# Liste zu prüfender Dienste ("Oder" Verknüpfung)
$myServices = @(
"GdProxy",
"GdWMService",
"G DATA Security Service",
"GdUpdSvc",
"GDFwSvc",
"GDFirewall",
"GdMailSecurity"
)
# Pfade für die neuen Prüfungen
$regPathToCheck = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GDATA"
$folderPathToCheck = "C:\ProgramData\G DATA\Client"
# Fehler-Variable initialisieren
$invokeErrors = @()
# 1. Parallele Ausführung und Fehler separat sammeln
# Die Roh-Ergebnisse (mit PSComputerName etc.) landen in $rawResults
$rawResults = Invoke-Command -ComputerName $Computer -ScriptBlock {
# $using-Variablen (wie von Ihnen bevorzugt) direkt zuweisen
$Services = $using:myServices
$RegPath = $using:regPathToCheck
$FolderPath = $using:folderPathToCheck
$actualcomputer = $ENV:Computername
# --- Prüfung 1: Dienste ---
$serviceFound = $false
foreach ($service in $Services) {
if (Get-Service -Name $service -ErrorAction SilentlyContinue) {
$serviceFound = $true
break # Beenden, sobald einer gefunden wurde
}
}
# --- Prüfung 2: Registry ---
# Test-Path prüft, ob der Schlüssel existiert
$regFound = Test-Path -Path $RegPath -ErrorAction SilentlyContinue
# --- Prüfung 3: Ordner ---
# Test-Path prüft, ob der Ordner existiert
$folderFound = Test-Path -Path $FolderPath -ErrorAction SilentlyContinue
# Ausgabe als PSCustomObject (mit den neuen Spalten)
[PSCustomObject]@{
Computer = $actualcomputer
Dienste = $serviceFound
RegistryCheck = $regFound
FolderCheck = $folderFound
# --- NEUE SPALTE (Logisches OR) ---
FinalesErgebnis = ($serviceFound -or $regFound -or $folderFound)
}
} -ErrorAction SilentlyContinue -ErrorVariable +invokeErrors # <-- KORRIGIERT
# 2. Erfolgreiche Ergebnisse BEREINIGEN
# Wir wählen explizit nur die Spalten aus, die wir wollen.
$successfulResults = $rawResults | Select-Object -Property Computer, Dienste, RegistryCheck, FolderCheck, FinalesErgebnis
# 3. Fehler verarbeiten (Offline-PCs etc.)
# Muss dieselbe Struktur wie die erfolgreichen Ergebnisse haben
$failedResults = $invokeErrors | ForEach-Object {
if ($_.TargetObject -is [string]) {
[PSCustomObject]@{
Computer = $_.TargetObject
Dienste = "unknown"
RegistryCheck = "unknown"
FolderCheck = "unknown"
FinalesErgebnis = "unknown"
}
}
} | Select-Object -Property * -Unique # Stellt sicher, dass jeder PC nur einmal gelistet wird
# 4. Ergebnisse kombinieren
# Sicherstellen, dass beide Variablen als Array behandelt werden
$finalResults = @($successfulResults) + @($failedResults)
# Zur Kontrolle (Sortiert ausgeben):
# $finalResults | Sort-Object Computer | ogv -title $title
return $finalResults