Показать полную графическую версию : Установить обои рабочего стола в домене через GPO
Нужен скрипт, который запускается через GPO, и выполняет следующие действия:
1. Определяет разрешение экрана машины в домене (клиентские ОС Windows 7/8).
2. Выполняет проверку: существует ли папка «Corp» в "%WinDir%\Web\Wallpaper\". Если нет, то создает папку.
3. В зависимости от разрешения экрана, копирует заранее подготовленный "wallpaper" из сетевой шары "\\fileserver\wallpaper\xxxx.bmp" на локальную машину в "%WinDir%\Web\Wallpaper\Corp\"
Файлы 1024x768.bmp; 1280x1024.bmp; 1600x900.bmp и т.д.
4. Выполняет применение текущего wallpaper (устраивает даже при следующей перезагрузке).
5. В случае изменения разрешения экрана, операция при следующем входе в систему повторяется под новое разрешение экрана.
6. В случае недоступности сетевой шары - сохраняются предыдущие успешно установленные параметры, и чтобы не выводились ошибки отработки скрипта и т.д.
На просторах интернета нашел немало готовых скриптов, но они выполняют только часть операций.
Задача для меня не совсем простая, опыта написания скриптов – нет.
Так предполагаю, что нужно будет два раздельных скрипта:
1 – выполняется через GPO на уровне компьютера, выполняет определение разрешения экрана и выполняет копирование из сети (связанно из-за того, что под пользователем без прав локального администратора, не получится скопировать в "%WinDir%\Web\Wallpapaer\Corp\".
2 – выполняется через GPO на уровне пользователя, и выполняет уже применение существующей локальной обоины.
Помогите пожалуйста, в решение данной задачи.
dinovasya@vk
14-07-2014, 18:39
хмм. Интересная задача, не решена до сих пор? сеййчас тоже поищу в просторах интернета.. Поделись если есть готовое решение..
Задача решена, но частично.
Пока нет решения по всем выше описанным операциям, но есть скрипт, который отрабатывает за исключением нескольких пунктов.
В моем варианте, заранее подготовленные обои лежат в \\domain.local\sysvol\domain.local\Wallpapers\
В формате Corp1024x768.bmp; Corp1366x768.bmp
Сам скрипт запускается через GPO, на уровне пользователя.
Wallpaper.vbs
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
dim wshShell
sWallPaper = "\\domain.local\SYSVOL\domain.local\Wallpapers\Corp" _
& objItem.ScreenWidth & "x" & objItem.ScreenHeight & ".bmp"
'msgbox (sWallPaper)
Set wshShell = WScript.CreateObject("WScript.Shell")
Set oShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
WinDir = oFSO.GetSpecialFolder(0)
If oFSO.FileExists(sWallPaper) Then
oShell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper", sWallPaper
oShell.RegWrite "HKCU\Control Panel\Desktop\TileWallpaper", 0
oShell.Run "%windir%\System32\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 1, True
Else
msgbox ("Сообщите системному администратору, об нестандартном разрешение экрана: " _
& objItem.ScreenWidth & "x" & objItem.ScreenHeight)
End If
If objItem.ScreenHeight >0 Then
Exit For
End If
Next
dinovasya@vk
15-07-2014, 18:54
Вчера пытался настроить через GPO, но в итоге оставил без изменений, т.к. в моей доменной сети в основном компы на windows7 и десяток компов на windows XP, боюсь что получится что-то не то если подсуну стили для 7-ки, как их воспримут машины на XP? ведь правило применится ко всем компам..
Ой, извини, тут про обои, а я стили пытался подсунуть всем.. хотя вот насчет обоев попробую.
Думаю приятно будет всем, когда с утра загрузятся на всех машинах обои, которые что-то обозначают именно на нашем производстве.
Все праздники, как google меняет дудлы, так и обои можно подстраивать..
Машины на XP и 7-ке наверно все воспримут нормально обои?
А как они сами себе каждая машина выберет нужное разрешение картинки?
Вчера пытался настроить через GPO, но в итоге оставил без изменений, т.к. в моей доменной сети в основном компы на windows7 и десяток компов на windows XP, боюсь что получится что-то не то если подсуну стили для 7-ки, как их воспримут машины на XP? ведь правило применится ко всем компам.. »
На счет стилей особо не подскажу, уже был не очень удачный опыт через GPO… это было очень давно.
А если крутить стили, или что-либо другое скриптами через GPO, то можно предварительно также через скрипт, сделать определение версии ОС, а дальше уже использовать раздельные скрипты для разного типа ОС.
Думаю приятно будет всем, когда с утра загрузятся на всех машинах обои, которые что-то обозначают именно на нашем производстве. »
Особенно еще для счастья запретить ручную смену обоев, также через GPO.
Машины на XP и 7-ке наверно все воспримут нормально обои?
А как они сами себе каждая машина выберет нужное разрешение картинки? »
Скрипт проверен через GPO (домен 2008R2) на XP/VISTA/7/8/2008R2 – везде отрабатывает нормально.
Ну так это одна из основных задач данного скрипта, определение текущего разрешения экрана objItem.ScreenWidth и objItem.ScreenHeight
Главное предварительно настряпать обои под все действующие разрешения.
А если найдутся уникумы в сети с нестандартным разрешением, то им будет назойливо каждый раз при загрузке сообщение выдаваться "Сообщите системному администратору, об нестандартном разрешение экрана: 1600x1200" к примеру.
dinovasya@vk
16-07-2014, 08:01
Очень доступно, подробно.
Тут и у новичка вопросов больше не возникнет. Спасибо!
Со стилями баловаться не буду, а вот обои через фотошоп сам наделаю под разное разрешение- дело 5-ти минут..
Главное предварительно настряпать обои под все действующие разрешения.
А если найдутся уникумы в сети с нестандартным разрешением, то им будет назойливо каждый раз при загрузке сообщение выдаваться "Сообщите системному администратору, об нестандартном разрешение экрана: 1600x1200" к примеру. »
Или иметь одну большую картинку, из которой уже готовить подходящую под конкретное разрешение и пропорции «на месте», например, посредством WIA.
dinovasya@vk
16-07-2014, 11:34
Или иметь одну большую картинку, из которой уже готовить подходящую под конкретное разрешение и пропорции «на месте», например, посредством WIA. »
Научи..
Научи.. »
Попробуйте так:
Option Explicit
Const wiaFormatBMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
Const ssfLOCALAPPDATA = &H1C
Dim strDomainPath2WallpaperFile
Dim objFSO
Dim strLocalPath2WallpaperFolder
Dim strLocalPath2WallpaperFile
Dim collSWbemObjectSet
Dim objSWbemObjectEx
Dim objImageFile
strDomainPath2WallpaperFile = "C:\Мои проекты\Wallpapers\Source2.jpg"
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Not objFSO.FileExists(strDomainPath2WallpaperFile) Then
WScript.Echo "Can't find wallpaper's source file [" & strDomainPath2WallpaperFile & "]."
WScript.Quit 1
End If
strLocalPath2WallpaperFolder = objFSO.BuildPath(WScript.CreateObject("Shell.Application").NameSpace(ssfLOCALAPPDATA).self.Path, "Microsoft")
If Not objFSO.FolderExists(strLocalPath2WallpaperFolder) Then
WScript.Echo "Can't find local path [" & strLocalPath2WallpaperFolder & "] to wallpapers."
WScript.Quit 2
End If
Set collSWbemObjectSet = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").ExecQuery("SELECT ScreenWidth, ScreenHeight FROM Win32_DesktopMonitor")
If collSWbemObjectSet.Count > 0 Then
For Each objSWbemObjectEx In collSWbemObjectSet
Set objImageFile = WScript.CreateObject("WIA.ImageFile")
objImageFile.LoadFile strDomainPath2WallpaperFile
With WScript.CreateObject("WIA.ImageProcess")
.Filters.Add .FilterInfos("Scale").FilterID
With .Filters.Item(1).Properties
.Item("MaximumWidth") = objSWbemObjectEx.ScreenWidth
.Item("MaximumHeight") = objSWbemObjectEx.ScreenHeight
End With
.Filters.Add .FilterInfos("Convert").FilterID
.Filters.Item(2).Properties.Item("FormatID").Value = wiaFormatBMP
Set objImageFile = .Apply(objImageFile)
End With
strLocalPath2WallpaperFile = objFSO.BuildPath(strLocalPath2WallpaperFolder, objFSO.GetBaseName(strDomainPath2WallpaperFile) & ".bmp")
If objFSO.FileExists(strLocalPath2WallpaperFile) Then
objFSO.DeleteFile strLocalPath2WallpaperFile, True
End If
objImageFile.SaveFile strLocalPath2WallpaperFile
With WScript.CreateObject("WScript.Shell")
.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", strLocalPath2WallpaperFile
.Run """%SystemRoot%\System32\RUNDLL32.EXE"" user32.dll,UpdatePerUserSystemParameters", 0, True
End With
Set objImageFile = Nothing
Exit For
Next
Else
WScript.Echo "Can't find any DesktopMonitor."
WScript.Quit 3
End If
Set objFSO = Nothing
WScript.Quit 0
P.S. На «UpdatePerUserSystemParameters» я бы не особенно рассчитывал — работает от станции к станции, не угадаешь.
P.P.S. Конечно, можно масштабировать не только по большей стороне изображения как сейчас (при разнице в соотношении сторон исходного изображения и текущего разрешения (например, изображение — 16:9, а монитор — 4:3 сверху/снизу или справа/слева могут оставаться поля, заполненные фоновым цветом), но и вычислять кроп-фактор и обрезать изображение, подгоняя его соотношение под текущее разрешение.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.