Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Установить обои рабочего стола в домене через GPO

Ответить
Настройки темы
VBS/WSH/JS - Установить обои рабочего стола в домене через GPO

Новый участник


Сообщения: 14
Благодарности: 1

Профиль | Отправить PM | Цитировать


Нужен скрипт, который запускается через 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 на уровне пользователя, и выполняет уже применение существующей локальной обоины.

Помогите пожалуйста, в решение данной задачи.

Отправлено: 20:52, 01-06-2014

 

Новый участник


Сообщения: 21
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


хмм. Интересная задача, не решена до сих пор? сеййчас тоже поищу в просторах интернета.. Поделись если есть готовое решение..

Отправлено: 18:39, 14-07-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 14
Благодарности: 1

Профиль | Отправить PM | Цитировать


Задача решена, но частично.

Пока нет решения по всем выше описанным операциям, но есть скрипт, который отрабатывает за исключением нескольких пунктов.

В моем варианте, заранее подготовленные обои лежат в \\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

Отправлено: 18:24, 15-07-2014 | #3


Новый участник


Сообщения: 21
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Вчера пытался настроить через GPO, но в итоге оставил без изменений, т.к. в моей доменной сети в основном компы на windows7 и десяток компов на windows XP, боюсь что получится что-то не то если подсуну стили для 7-ки, как их воспримут машины на XP? ведь правило применится ко всем компам..


Ой, извини, тут про обои, а я стили пытался подсунуть всем.. хотя вот насчет обоев попробую.
Думаю приятно будет всем, когда с утра загрузятся на всех машинах обои, которые что-то обозначают именно на нашем производстве.
Все праздники, как google меняет дудлы, так и обои можно подстраивать..

Машины на XP и 7-ке наверно все воспримут нормально обои?
А как они сами себе каждая машина выберет нужное разрешение картинки?

Отправлено: 18:54, 15-07-2014 | #4


Новый участник


Сообщения: 14
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата dinovasya@vk:
Вчера пытался настроить через GPO, но в итоге оставил без изменений, т.к. в моей доменной сети в основном компы на windows7 и десяток компов на windows XP, боюсь что получится что-то не то если подсуну стили для 7-ки, как их воспримут машины на XP? ведь правило применится ко всем компам.. »
На счет стилей особо не подскажу, уже был не очень удачный опыт через GPO… это было очень давно.
А если крутить стили, или что-либо другое скриптами через GPO, то можно предварительно также через скрипт, сделать определение версии ОС, а дальше уже использовать раздельные скрипты для разного типа ОС.

Цитата dinovasya@vk:
Думаю приятно будет всем, когда с утра загрузятся на всех машинах обои, которые что-то обозначают именно на нашем производстве. »
Особенно еще для счастья запретить ручную смену обоев, также через GPO.

Цитата dinovasya@vk:
Машины на XP и 7-ке наверно все воспримут нормально обои?
А как они сами себе каждая машина выберет нужное разрешение картинки? »
Скрипт проверен через GPO (домен 2008R2) на XP/VISTA/7/8/2008R2 – везде отрабатывает нормально.

Ну так это одна из основных задач данного скрипта, определение текущего разрешения экрана objItem.ScreenWidth и objItem.ScreenHeight
Главное предварительно настряпать обои под все действующие разрешения.
А если найдутся уникумы в сети с нестандартным разрешением, то им будет назойливо каждый раз при загрузке сообщение выдаваться "Сообщите системному администратору, об нестандартном разрешение экрана: 1600x1200" к примеру.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:23, 15-07-2014 | #5


Новый участник


Сообщения: 21
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Очень доступно, подробно.
Тут и у новичка вопросов больше не возникнет. Спасибо!
Со стилями баловаться не буду, а вот обои через фотошоп сам наделаю под разное разрешение- дело 5-ти минут..

Отправлено: 08:01, 16-07-2014 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата PowerZ:
Главное предварительно настряпать обои под все действующие разрешения.
А если найдутся уникумы в сети с нестандартным разрешением, то им будет назойливо каждый раз при загрузке сообщение выдаваться "Сообщите системному администратору, об нестандартном разрешение экрана: 1600x1200" к примеру. »
Или иметь одну большую картинку, из которой уже готовить подходящую под конкретное разрешение и пропорции «на месте», например, посредством WIA.

Отправлено: 10:29, 16-07-2014 | #7


Новый участник


Сообщения: 21
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
Или иметь одну большую картинку, из которой уже готовить подходящую под конкретное разрешение и пропорции «на месте», например, посредством WIA. »
Научи..

Отправлено: 11:34, 16-07-2014 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата dinovasya@vk:
Научи.. »
Попробуйте так:
читать дальше »
Код: Выделить весь код
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 сверху/снизу или справа/слева могут оставаться поля, заполненные фоновым цветом), но и вычислять кроп-фактор и обрезать изображение, подгоняя его соотношение под текущее разрешение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:58, 16-07-2014 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Установить обои рабочего стола в домене через GPO

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 - установить обои рабочего стола для всех машин в домене через политики? God-of-Chaos Windows Server 2008/2008 R2 9 06-03-2014 22:49
Обои для рабочего стола skelet666 Хочу все знать 3 16-02-2012 20:31
Программы - *Онлайн обои* (Обои рабочего стола с сервера) P.r.i.z.r.a.k. Оформление Windows 11/ 10 / 8 / 7 / Vista 1 23-01-2011 00:37
Интерфейс - [решено] обои рабочего стола yuka Microsoft Windows 2000/XP 4 18-07-2010 11:38
Обои для рабочего стола ALI Хочу все знать 3 03-05-2003 16:07




 
Переход