lcer00
Goto Top

Wie angepasste Dateien auf Windows-PCs verteilen?

Hallo zusammen,

ich benötige eine einfache Lösung, mit der ich aktualisierte Dateien auf Windows-10 Clients verteilen kann. Es handelt sich um Word-Vorlagen und einige Einstellungs-(Text)-Files, die auf einer Server-Freigabe liegen. Nicht alle PCs erhalten die selben Dateien, es gibt verschiedene GPOs, die das über GPP erreichen.

Da habe ich das Problem, dass bei jedem gpupdate die Dateien neu kopiert werden, was unnützen traffic produziert (GPP:Ersetzen; Aktualisiseren reicht nicht, da die Dateien gelegentlich geändert werden). Um das Effizienter zu gestalten, habe ich ein Powershell-Skript gebastelt, das für die Dateien auf dem Server eine Hash generiert und eine Datei schreibt. Der Client lädt die Hash-Datei vom Server und schaut nach, welche noch aktuell sind. So weit so gut, funktioniert am Testsystem. Es geht um ca. 100 Dateien in 3-4 Varianten zusammengestellt. Das Client Skript wird über GPO verteilt und gestartet.

Allerdings habe ich das Gefühl, das Rad jeweils neu zu erfinden. Was habe ich mir noch angesehen habe:

Zunächst Ansible: Ich habe Ansible für unsere Linux Maschinen im Einsatz. Allerdings behagt es mir nicht, die Domänen-Anmeldedaten auf dem Ansible-Rechner zum Zugriff auf die PCs zu nutzen. Ich habe die Windows-AD-Domäne benutzerzugangsmäßig komplett von unseren Linux-Systemen getrennt. Und ein ansible-pull scheint auf Windows nicht realisiserbar zu sein.

opsi: Ich will keine Software installieren, nur ein paar Dateien verteilen. Das ganze wäre oversized, und wenn ich opsi-skripts bastle, kann ich auch bei meiner Powershell Variante bleiben.

Intune: haben wir nicht für alle PCs, wir warten mal, wie sich Azure und Windows 11 weiterentwickelt...

Hat jemand noch eine Idee, eine Ansatz?

Grüße

lcer

Content-Key: 1078278259

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

Printed on: April 16, 2024 at 21:04 o'clock

Member: Vision2015
Vision2015 Jul 23, 2021 at 07:42:03 (UTC)
Goto Top
Moin...
Da habe ich das Problem, dass bei jedem gpupdate die Dateien neu kopiert werden, was unnützen traffic produziert
egal ob opsi oder intune, der traffic bleibt der gleiche.... von was reden den genau?

Frank
Member: lcer00
lcer00 Jul 23, 2021 at 07:45:57 (UTC)
Goto Top
Hallo,
Zitat von @Vision2015:

Moin...
Da habe ich das Problem, dass bei jedem gpupdate die Dateien neu kopiert werden, was unnützen traffic produziert
egal ob opsi oder intune, der traffic bleibt der gleiche.... von was reden den genau?
hab ich doch geschrieben,

Momentan vergleiche ich per Powershell die Dateihashes und der Netzwerk-Traffic beschränkt sich auf das Herunterladen der Hash-Datei. Nur wenn der Hash nicht stimmt, wird die Datei vom Server geladen.

Ich suche halt eine Lösung für wenig Traffic und wenig überbordendem Aufwand.

Grüße

lcer
Member: Vision2015
Vision2015 Jul 23, 2021 at 07:59:59 (UTC)
Goto Top
Zitat von @lcer00:

Hallo,
Zitat von @Vision2015:

Moin...
Da habe ich das Problem, dass bei jedem gpupdate die Dateien neu kopiert werden, was unnützen traffic produziert
egal ob opsi oder intune, der traffic bleibt der gleiche.... von was reden den genau?
hab ich doch geschrieben,
ich meine an Netzwerk Last...

Momentan vergleiche ich per Powershell die Dateihashes und der Netzwerk-Traffic beschränkt sich auf das Herunterladen der Hash-Datei. Nur wenn der Hash nicht stimmt, wird die Datei vom Server geladen.

Ich suche halt eine Lösung für wenig Traffic und wenig überbordendem Aufwand.
das mit dem Aufwand verstehe ich, das mit dem Traffic finde ich überbewertet.... gut wenn die datei jetzt 25MB hat, und 200 user gleichzeitig.....

Grüße

lcer
Frank
Member: beidermachtvongreyscull
beidermachtvongreyscull Jul 23, 2021 updated at 08:01:20 (UTC)
Goto Top
Moin,

ich mache das mit VBScript (allerdings nur für die Normal.dotm) mit optionalem Datenvergleich (Datum der letzten Änderung):

Const OverwriteExisting = TRUE
'Windows-Benutzername und %APPDATA%-Variable auslesen  
Set wshShell = CreateObject( "WScript.Shell" )  
strUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )  
strAppDataDir = wshSHell.ExpandEnvironmentStrings( "%APPDATA%" )  

'Vorhandenseins-Prüfungen für Server- und lokale Dateien  
LokaleDateiVorhanden = 0
ServerDateiVorhanden = 0
LokalerOrdnerVorhanden = 0

'Prüfung ob lokale Datei existiert  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
If (objFSO.FileExists(strAppDataDir & "\Microsoft\Templates\Normal.dotm")) Then  
	LokaleDateiVorhanden = 1
	Set objFSO = Nothing
End If

'Prüfung ob Datei auf Server existiert  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
If (objFSO.FileExists("\\server\word\Deploy\word-neu\Normal.dotm")) Then  
	ServerDateiVorhanden = 1
	Set objFSO = Nothing
End If

'Prüfung ob lokaler Ordner existiert  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
If (objFSO.FolderExists(strAppDataDir & "\Microsoft\Templates\")) Then  
	LokalerOrdnerVorhanden = 1
	Set objFSO = Nothing
End If


'Wenn beide Dateien vorhanden, dann Prüfung auf Datumsunterschied und ggf. Ersetzung  
If LokaleDateiVorhanden AND ServerDateiVorhanden Then
	Set objFSO = CreateObject("Scripting.FileSystemObject")  
	Set objLocalFile = objFSO.GetFile(strAppDataDir & "\Microsoft\Templates\Normal.dotm")  
	dtmLocalDate = objLocalFile.DateLastModified
	Set objServerFile = objFSO.GetFile("\\server\word\Deploy\word-neu\Normal.dotm")  
	dtmServerDate = objServerFile.DateLastModified
	'If dtmLocalDate < dtmServerDate Then '...überschreibe sie nur, wenn die Serverdatei neueren Datums ist...  
		objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting
		Set objFSO = Nothing
	'End If  
	WScript.Quit
End If

'Wenn lokaler Ordner noch nicht erstellt wurde oder lokale Datei fehlt...  
If LokaleDateiVorhanden = 0 OR LokalerOrdnerVorhanden = 0 then
	Set objFSO = CreateObject("Scripting.FileSystemObject")  
	objLocalFilePath = strAppDataDir & "\Microsoft\Templates" & chr(92)  
	Set objShell = CreateObject("Wscript.Shell")  
	If LokalerOrdnerVorhanden = 0 Then
		objShell.Run "cmd /c mkdir " & chr(34) & objLocalFilePath & chr(34)  
	End If
	Set objServerFile = objFSO.GetFile("\\server\word\Deploy\word-neu\Normal.dotm")  
	WScript.Sleep (1000)
	objFSO.CopyFile objServerFile, objLocalFilePath, OverwriteExisting
	Set objFSO = Nothing
	WScript.Quit
End If
Member: lcer00
lcer00 Jul 23, 2021 at 08:06:14 (UTC)
Goto Top
Zitat von @Vision2015:

das mit dem Aufwand verstehe ich, das mit dem Traffic finde ich überbewertet.... gut wenn die datei jetzt 25MB hat, und 200 user gleichzeitig.....
Es geht mir weniger um den Netzwerktraffic an sich (hätte ich vielleicht genauer schreiben sollen). Es geht darum dass unsere Anwendungssoftware seltsam ist und das ständige Sperren der Dateien beim Überschreiben zu Problemen mit dem Dateizugriff führt. Und es geht ums Prinzip face-smile , warum muss man Daten über das Netzwerk senden, wenn das unnötig ist (offenbar so eine Art Kontrollzwang).

Grüße

lcer
Mitglied: 149062
149062 Jul 23, 2021 updated at 08:13:39 (UTC)
Goto Top
Robocopy Task oder Startskript per GPO auf die Clients verteilen.
Member: lcer00
lcer00 May 13, 2022 at 09:07:32 (UTC)
Goto Top
Hallo,

also, es ist zum Schluss auf ACMP als Clientverwaltungssoftware herausgelaufen.

Grüße

lcer