Заранее прошу прощения у уважаемой общественности за, возможно, глупый вопрос. Суть проблемы: первая синхронизация WSUS произошла 18.12.08 по расписанию, длилась с 00:18 по 05:03, синхронизация происходит по расписанию раз в сутки. Все последующие синхронизации занимали по времени 2-5 минут. Сейчас, 21.12.08 в списке остались обновления, файлы для которых ещё не загружены, среди которых и SP3 для Windows XP, которое необходимо клиентским ПК. Вопрос - как можно форсировать загрузку необходимых обновлений? При постоянном круглосуточном подключении сервера к интернет-каналу в 10 Мбит/сек такая медлительность при загрузке обновлений выглядит странно...
» Windows Server Update Services (WSUS & SUS), часть III
penkovmm
это из-за того, что всус по битсу смотрит на загруженность канала
решение тут
только рекомендую потом обратно вернуть, т.к. всус тогда вообще всю полосу сжирает, или тогда уж одобрять обновки только в то время когда никто более тырнетом не пользуется.
это из-за того, что всус по битсу смотрит на загруженность канала
решение тут
только рекомендую потом обратно вернуть, т.к. всус тогда вообще всю полосу сжирает, или тогда уж одобрять обновки только в то время когда никто более тырнетом не пользуется.
Возникла небольшая проблемка. Вопрос этот уже поднимался, но ответа не последовало.. При синхронизации вылазит следующая ошибка:
Ошибка при загрузке файла содержимого. Причина: Серверу не удается обработать запрос из-за неверного синтаксиса.
Исходный файл: /msdownload/update/software/svpk/2008/04/windowsxp-kb936929-sp3-x86-rus_850cda9f57033a17d046a56d422547ea80dcaf61.exe Конечный файл: c:\WSUS\WsusContent\61\850CDA9F57033A17D046A56D422547EA80DCAF61.exe.
Причем вылазит она только на нескольких крупных пакетах. Конкрентно: sp3 для winxp, sp2 для офиса 2003го (при том sp3 скачался нормально, непонятно зачем он вообще качает sp2) и на дотнет все версии. В настройках классов стоит все, кроме накопительных обновлений. При принудительной скачке одного из данных обновлений тоже самое.
И еще вопрос, т.к. он в ошибке пишет исходный и конечный файл. Если я скачаю их вручную (через браузер) и положу в папку с всусом, всус увидит их ?
Ошибка при загрузке файла содержимого. Причина: Серверу не удается обработать запрос из-за неверного синтаксиса.
Исходный файл: /msdownload/update/software/svpk/2008/04/windowsxp-kb936929-sp3-x86-rus_850cda9f57033a17d046a56d422547ea80dcaf61.exe Конечный файл: c:\WSUS\WsusContent\61\850CDA9F57033A17D046A56D422547EA80DCAF61.exe.
Причем вылазит она только на нескольких крупных пакетах. Конкрентно: sp3 для winxp, sp2 для офиса 2003го (при том sp3 скачался нормально, непонятно зачем он вообще качает sp2) и на дотнет все версии. В настройках классов стоит все, кроме накопительных обновлений. При принудительной скачке одного из данных обновлений тоже самое.
И еще вопрос, т.к. он в ошибке пишет исходный и конечный файл. Если я скачаю их вручную (через браузер) и положу в папку с всусом, всус увидит их ?
Здравствуйте, понимаю что эта тема обсуждалось не раз но все таки подскажите плиз. Вообщем есть 2 сервера wsus 2 один в сети с интернетом другой сети без интернета и еще один новый сервер без всего надо поставить на новый и на любой из двух других WSUS 3 как это лучше сделать.
Добрый день.
есть сервер WSUS 3, как можно отменить то что сервер собрался выкачать из инета?
Download Status
Updates needing files: 21
Downloaded 2,619.32 MB of 44,081.27 Mb
есть сервер WSUS 3, как можно отменить то что сервер собрался выкачать из инета?
Download Status
Updates needing files: 21
Downloaded 2,619.32 MB of 44,081.27 Mb
у меня сейчас настроен и прекрасно работает WSUS сервер. А можно сделать так: на другой комп поставить скажем WSUS 3.0 и указать чтобы он качал обновления с моего старого WSUS сеовера? хотелось бы сделать как написал потому что вариант с обновлением не совсем подходит.
Shura787689
WSUS 3.0 синхронизируется с WSUS старых версий?
Нет. А вот наоборот - возможно.
http://www.wikiznanie.ru/ru-wz/index.php/WSUS_FAQ
Добавлено:
у меня такой вопрос:
поднят WSUS 3.0 SP1 на Win2k3 R2. Клиенты WinXP SP1-2.
так вот: некоторые клиенты не "видят" обновлений. Клиент обновлений успешно обновился сам, WSUS их (клиентов) видит, но клиенты обновлений нет(!).
из логов на машинах типа этого
>## RESUMED ## AU: Search for updates [CallId = 8DB1D962-2580-432EA0CF-39BA167D9D23}]
# 0 updates detected
WSUS 3.0 синхронизируется с WSUS старых версий?
Нет. А вот наоборот - возможно.
http://www.wikiznanie.ru/ru-wz/index.php/WSUS_FAQ
Добавлено:
у меня такой вопрос:
поднят WSUS 3.0 SP1 на Win2k3 R2. Клиенты WinXP SP1-2.
так вот: некоторые клиенты не "видят" обновлений. Клиент обновлений успешно обновился сам, WSUS их (клиентов) видит, но клиенты обновлений нет(!).
из логов на машинах типа этого
>## RESUMED ## AU: Search for updates [CallId = 8DB1D962-2580-432EA0CF-39BA167D9D23}]
# 0 updates detected
vensen
Цитата:
Обновления на сервере одобрены и скачаны?
Цитата:
но клиенты обновлений нет(!).
Обновления на сервере одобрены и скачаны?
1) в виртуальной среде установлена W2k3r2sp2, установил wsus 3.1 по http://wsusserver/wsusadmin пишет "page cannot be fouund". wsus 3.1 работает только через консоль или можно все-таки настроить через обозреватель?
2) При установке wsus 3.1 автоматически ставиться SQL 2005 Express или что-то более обрезанное (MSDE)?
2) При установке wsus 3.1 автоматически ставиться SQL 2005 Express или что-то более обрезанное (MSDE)?
Дело было так.
Закрытая сеть, виртуальный сервер Win2003AdvServ под вмваре 6. Водрузил на него WSUS 3.0 SP1. Потом дабы сэкономить время на установках, скопировал виртуальныу машину в сеть с выходом в инет. Все пути совпадают.
В инетной сети WSUS прижился нормально. Сходил в инет за обновками. Накачал 2 гига в \WsusContent. Инет клиенты с него обновились. На сводной странице WSUS сервера (как тут http://kyi-13.narod.ru/_old/wsus.JPG), написано, что необходимо скачать 0 обновлений.
В общем все заработало нормально.
Теперь задача перенести WSUS в закрытую сеть. Делаю как написано тут:
http://technet.microsoft.com/en-us/library/cc720512.aspx
Т.е. копирую содержимое \WsusContent, делаю "wsusutil.exe export export.cab export.log".
Восстанавливаю на WSUS в закрытой сети. Вроде как все нормально. Клиенты видят и регистрируются на сервере. НО!!! в описании всех обновлений написано, что они еще не загружены из инета. И на сводной странице WSUS сервера (как тут) написано, что необходимо скачать с инета 20 Гигов.
-ключ реестра HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\SusClienId – отсутсвует.
-wsusutil /reset не помогает
-передернул одобрение с неодобрена на обрено - не помогает
Как ему вернуть зрение? Как показать что обновления у него есть?
Закрытая сеть, виртуальный сервер Win2003AdvServ под вмваре 6. Водрузил на него WSUS 3.0 SP1. Потом дабы сэкономить время на установках, скопировал виртуальныу машину в сеть с выходом в инет. Все пути совпадают.
В инетной сети WSUS прижился нормально. Сходил в инет за обновками. Накачал 2 гига в \WsusContent. Инет клиенты с него обновились. На сводной странице WSUS сервера (как тут http://kyi-13.narod.ru/_old/wsus.JPG), написано, что необходимо скачать 0 обновлений.
В общем все заработало нормально.
Теперь задача перенести WSUS в закрытую сеть. Делаю как написано тут:
http://technet.microsoft.com/en-us/library/cc720512.aspx
Т.е. копирую содержимое \WsusContent, делаю "wsusutil.exe export export.cab export.log".
Восстанавливаю на WSUS в закрытой сети. Вроде как все нормально. Клиенты видят и регистрируются на сервере. НО!!! в описании всех обновлений написано, что они еще не загружены из инета. И на сводной странице WSUS сервера (как тут) написано, что необходимо скачать с инета 20 Гигов.
-ключ реестра HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\SusClienId – отсутсвует.
-wsusutil /reset не помогает
-передернул одобрение с неодобрена на обрено - не помогает
Как ему вернуть зрение? Как показать что обновления у него есть?
FSergei
Цитата:
Подсчитываешь SHA1 файла -> переименовываешь -> ложишь в каталог WsusContent\Две_последние_цифры_SHA1 -> синхронизация
Цитата:
Если я скачаю их вручную (через браузер) и положу в папку с всусом, всус увидит их ?
Подсчитываешь SHA1 файла -> переименовываешь -> ложишь в каталог WsusContent\Две_последние_цифры_SHA1 -> синхронизация
Вопрос пытаюсь одобрить в wsus 3 sp1 XPSP3 ищи дюжину обновлений, а он пишет что не удалось обобразить лицензионное соглашение для обновлений
в чем может быть беда?
в чем может быть беда?
Поднял WSUS 3.0, обновления на локальных ПК скачиваются нормально, но автоматически не устанавливаются, хотя это задал в групповой политике в административных шаблонах в настройке автоматического обновления (параметр "4" - автоматическая загрузка и установка по расписанию). Появляется лишь знак восклицательный в трее с предложением установить обновление. А нужно именно автоматически его ставить. В чем может быть проблема?
проблема решилась для пользователя без админских прав... но вот как сделать установку автоматической для пользователя с правами админа?..
Доброго времени суток!
Поставил у себя в домене WSUS 3.0 сервак, все нормально на нем вроде как настроил, он выкачал все обновления. Теперь встала новая проблема, почему то не все компы хотят подключаться к нему.
Раздаю через GPO. Одна политика на все компы. Настроил в ней обязательное обновление ежедневно и ежечасно проверять новыеобновления на серваке. Но из всех компов только треть постучалась на WSUS сервак и появилась на нем в разделе компьютеров. Постучавшиеся уже за 2 дня почти все обновились всеми нужными апдейтами.
Стал эксперементировать с непостучавщимися компами. Посматрел служба автообновления включена на них. после wuauclt /detecnow ничего не происходит. Решил тогда локально их настроить без GPO, все прописал как нужно, опять ввожу wuauclt /detectnow все равно ноль эмоций...
кто может подсказать где собака зарыта и в чем проблема может быть?
Поставил у себя в домене WSUS 3.0 сервак, все нормально на нем вроде как настроил, он выкачал все обновления. Теперь встала новая проблема, почему то не все компы хотят подключаться к нему.
Раздаю через GPO. Одна политика на все компы. Настроил в ней обязательное обновление ежедневно и ежечасно проверять новыеобновления на серваке. Но из всех компов только треть постучалась на WSUS сервак и появилась на нем в разделе компьютеров. Постучавшиеся уже за 2 дня почти все обновились всеми нужными апдейтами.
Стал эксперементировать с непостучавщимися компами. Посматрел служба автообновления включена на них. после wuauclt /detecnow ничего не происходит. Решил тогда локально их настроить без GPO, все прописал как нужно, опять ввожу wuauclt /detectnow все равно ноль эмоций...
кто может подсказать где собака зарыта и в чем проблема может быть?
TroViX
c:\WINDOWS\WindowsUpdate.log с проблемной машины в студию
c:\WINDOWS\WindowsUpdate.log с проблемной машины в студию
сначало выяснилось все компы клонированные тут, ну или почти все. Винды установлены еще за долго до меня были.
Но рано блин обрадовался, только несколько компов после удаления параметра в реестре SusClienId и wuauclt.exe /ResetAuthorization постучались. Остальные так и не хотят.
seva100, вот лог
Цитата:
Но рано блин обрадовался, только несколько компов после удаления параметра в реестре SusClienId и wuauclt.exe /ResetAuthorization постучались. Остальные так и не хотят.
seva100, вот лог
Цитата:
2009-01-21 10:25:39+0300 1072 56c Triggering AU detection through DetectNow api
2009-01-21 10:25:39+0300 1072 428 AU received event of 1
2009-01-21 10:25:40+0300 1072 428 WU client succeeds CClientCallRecorder::BeginFindUpdates from AutomaticUpdates with call id {2C0AAEE3-BE59-4F69-844F-6B3C622D1FF2}
2009-01-21 10:25:40+0300 1072 5f4 WU client executing call {2C0AAEE3-BE59-4F69-844F-6B3C622D1FF2} of type Search Call
2009-01-21 10:25:40+0300 1072 5f4 DownloadFileInternal failed for http://dc2sql:8530/SelfUpdate/wuident.cab: error 0x80190194
2009-01-21 10:25:40+0300 1072 5f4 IsUpdateRequired failed with error 0x80244019
2009-01-21 10:25:40+0300 1072 5f4 OS Version = 5.1.2600.3.0.65792
2009-01-21 10:25:42+0300 1072 5f4 Computer Brand = R-StyleComputers
2009-01-21 10:25:42+0300 1072 5f4 Computer Model = AWRDACPI
2009-01-21 10:25:42+0300 1072 5f4 Bios Revision = F9
2009-01-21 10:25:42+0300 1072 5f4 Bios Name = Award Modular BIOS v6.00PG
2009-01-21 10:25:42+0300 1072 5f4 Bios Release Date = 2004-09-09T00:00:00
2009-01-21 10:25:42+0300 1072 5f4 Locale ID = 1049
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: iuengine.dll = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wuapi.dll = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wuauclt.exe = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wuauclt1.exe = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wuaucpl.cpl = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wuaueng.dll = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wuaueng1.dll = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wuauserv.dll = 5.4.3790.5512
2009-01-21 10:25:42+0300 1072 5f4 ClientVersion: wucltui.dll = 5.4.3790.5512
2009-01-21 10:25:42+0300 1332 c3c Trying to make out of proc datastore active
2009-01-21 10:25:43+0300 1332 c3c Out of proc datastore is now active
2009-01-21 10:25:43+0300 1072 5f4 PT: Using serverID {3DA21691-E39D-4DA6-8A4B-B43877BCB1B7}
2009-01-21 10:25:43+0300 1072 5f4 WU client failed Searching for update with error 0x80248008
2009-01-21 10:25:43+0300 1072 5f4 Search Callback Failed, hr is 0x80248008
2009-01-21 10:25:43+0300 1072 5f4 Setting next AU detection timeout to 2009-01-21 12:25:43
2009-01-21 10:25:43+0300 1072 5f4 Setting AU scheduled install time to 2009-01-21 18:00:00
2009-01-21 10:25:43+0300 1072 5f4 WU client calls back to search call AutomaticUpdates with code Call failed and error 0x80248008
2009-01-21 10:25:43+0300 1072 5f4 WU client completed and deleted call {2C0AAEE3-BE59-4F69-844F-6B3C622D1FF2}
2009-01-21 10:25:47+0300 1072 5f4 REPORT EVENT: {1228DAB5-DF78-4C08-A06B-3961EA7BD984} 75 2009-01-21 10:25:40+0300 1 148 101 {D67661EB-2423-451D-BF5D-13199E37DF28} 0 80244019 SelfUpdate Failure Software Synchronization Error: Agent failed detecting with reason: 0x80244019
2009-01-21 10:25:47+0300 1072 5f4 REPORT EVENT: {9B974E51-7E3C-41F1-BB0C-81FA5AB9DCE3} 76 2009-01-21 10:25:43+0300 1 148 101 {00000000-0000-0000-0000-000000000000} 0 80248008 AutomaticUpdates Failure Software Synchronization Error: Agent failed detecting with reason: 0x80248008
2009-01-21 10:25:47+0300 1072 5f4 Created new event cache file at C:\WINNT\SoftwareDistribution\EventCache\{E06EB1DB-7545-4E47-B600-80E082FA62E8}.bin for writing.
2009-01-21 10:25:47+0300 1072 5f4 Reopened existing event cache file at C:\WINNT\SoftwareDistribution\EventCache\{6C18AD70-6EA9-4928-AFBF-54794E629A19}.bin for writing.
2009-01-21 10:29:20+0300 1072 5f4 Successfully opened event cache file at C:\WINNT\SoftwareDistribution\EventCache\{62490379-4FDE-4C50-B0C7-D6364F274B72}.bin for reading.
2009-01-21 10:29:20+0300 1072 5f4 PT: Using serverID {3DA21691-E39D-4DA6-8A4B-B43877BCB1B7}
2009-01-21 10:29:20+0300 1072 5f4 Failed to obtain cached cookie with hr = 80248008.
2009-01-21 10:29:20+0300 1072 5f4 Failed to upload events with hr = 80248008.
как в всусе найти SP1 на Vista? там куча папок.
Поставил WSUS 3 + SP1 на голую W2K3 R2 Ent
Встало всё без проблем, но вот синхриться не хочет.
*******Error*********
WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. ... и т.д.
*******Error*********
Про сертификаты здесь http://forums.microsoft.com/TechNet-RU/ShowPost.aspx?PostID=4265453&SiteID=40&mode=1 читал... не помогло...
Про время тоже читал... не помогло
Инет на машине есть, прокси настроен в WSUS'е...
Кстати, может кого и наведет на мысть такая ситуация: "Время с time.windows.com тоже не синхрится"...
И с эксплорера тоже апдейт не идет ((
*******Error*********
Ошибка на веб-узле. Невозможно отобразить страницу. Чтобы устранить эту проблему, попробуйте выполнить следующие действия.
Обновите страницу.
В обозревателе Internet Explorer удалите временные файлы Интернета, выбрав в меню Сервис пункт Свойства обозревателя.
Закройте и снова откройте обозреватель Internet Explorer.
*******Error*********
Что за невезение ?
И еще... FireW'а нет и AntiV удалил пока....
Встало всё без проблем, но вот синхриться не хочет.
*******Error*********
WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. ... и т.д.
*******Error*********
Про сертификаты здесь http://forums.microsoft.com/TechNet-RU/ShowPost.aspx?PostID=4265453&SiteID=40&mode=1 читал... не помогло...
Про время тоже читал... не помогло
Инет на машине есть, прокси настроен в WSUS'е...
Кстати, может кого и наведет на мысть такая ситуация: "Время с time.windows.com тоже не синхрится"...
И с эксплорера тоже апдейт не идет ((
*******Error*********
Ошибка на веб-узле. Невозможно отобразить страницу. Чтобы устранить эту проблему, попробуйте выполнить следующие действия.
Обновите страницу.
В обозревателе Internet Explorer удалите временные файлы Интернета, выбрав в меню Сервис пункт Свойства обозревателя.
Закройте и снова откройте обозреватель Internet Explorer.
*******Error*********
Что за невезение ?
И еще... FireW'а нет и AntiV удалил пока....
Решил тоже поделиться своими наработками в работе с WSUS - написал на PHP скрипт для скачки нужных обновлений напрямую с локального сервера WSUS.
Последовательность инсталляции:
1) Установить Windows Server 2003 с последним пакетом обновления
2) Установить Windows Server Update Services 3.0 (x86 или x64)
http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=e4a868d7-a820-46a0-b4db-ed6aa4a336d9
3) Установить Microsoft SQL Server Native Client (x86 или x64)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=50b97994-8453-4998-8226-fa42ec403d17
по-русски: Собственный клиент Microsoft SQL Server:
http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=50b97994-8453-4998-8226-fa42ec403d17
4) Установить последнюю версию PHP на Internet IInformation Server, который использует WSUS, в режиме CGI
http://www.php.net/downloads.php
руководство: http://www.php.net/manual/ru/install.windows.iis.php
4.1.Каталог, в котором установился PHP (например C:\PHP) включаем в системную переменную окружения PATH.
4.2. Устанавливаем SQL Server 2005 Driver for PHP Cumulative Update в папку C:\PHP\ext
http://www.microsoft.com/downloads/details.aspx?FamilyID=61bf87e0-d031-466b-b09a-6597c21a2e2a&DisplayLang=en
4.3.В файле php.ini устанавливаем параметры:
short_open_tag = On
magic_quotes_gpc = On
extension_dir = c:/PHP/ext
doc_root = "c:\Inetpub\wwwroot"
cgi.force_redirect = 0
Отключаем все расширения php (extensions), т.к. они могут быть причиной "зависания" при запуске php-скриптов под IIS, но добавляем скачанное ранее php-расширение в php.ini
extension=php_sqlsrv_ts.dll
5.На папки C:\PHP и подпапки даем права на чтение пользователю IUSR_[имя компа] и группе IIS_WPG
6.Используя консоль администрирования SQL Server 2005 (если Вы установили базу WSUS [SUSDB] на него) или SQL Server Management Studio Express (если Вы используете локальную базу Windows Internal Database) дать права пользователю IUSR_[имя компа] на подключение и чтение данных базы SUSDB.
Microsoft SQL Server Management Studio Express
http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796
Подключиться к Windows Internal Database можно указав адрес сервера:
\\.\pipe\mssql$microsoft##ssee\sql\query
выбрать Windows Authentication и ввести логин и пароль администратора данного сервера.
7. В папку c:\Inetpub\wwwroot положить файл index.php
Код: <? include_once("inc/func.php");
$find=""; $file=""; $ord=""; $root="D:/WSUS/WsusContent/";
$server = '\\\\.\\pipe\\mssql$microsoft##ssee\\sql\\query';
$connectionInfo = array("Database"=>"SUSDB");
// Подключение к серверу
$conn = sqlsrv_connect($server, $connectionInfo);
if($conn === false) {
echo "Ошибка подключения к SUSDB!</br>";
echo "<pre>";
die(print_r(sqlsrv_errors(),true));
echo "</pre>\n";
exit; }
if(isset($_POST['find'])) $find = norm($_POST['find']);
elseif(isset($_GET['find'])) $find = base64_decode(norm($_GET['find']));
if(isset($_GET['file'])) $file = norm($_GET['file']);
if(isset($_GET['ord'])) $ord = norm($_GET['ord']);
if(strlen($file)>4) {
$sql = "SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest ";
$sql.= "FROM tbFile F, tbFileOnServer S ";
$sql.= "WHERE F.FileDigest=S.FileDigest AND ActualState<>1 AND IsEula=0 AND FileName='".$file."'";
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$farr = explode(".",$file);
$fext = $farr[count($farr)-1];
$source = $root.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) DownloadFile($source, $file); }
exit; }
?>
<html>
<head>
<meta http-equiv="Content-Type" CONTENT="text/html; charset=Windows-1251">
<meta http-equiv="pragma" content="nocache">
<title>Windows Server Update Services</title>
</head>
<body>
<? // Информация о сервере
$server_info = sqlsrv_server_info($conn);
if($server_info) {
echo "<pre>";
print_r($server_info);
echo "</pre>\n"; }
// Сейчас закачиваются
$sql = "SELECT FileName, Modified, BytesDownloaded, TotalBytesForDownload ";
$sql.= "FROM tbFileDownloadProgress INNER JOIN ";
$sql.= " tbFileOnServer ON tbFileDownloadProgress.RowID = tbFileOnServer.RowID INNER JOIN ";
$sql.= " tbFile ON tbFileOnServer.FileDigest = tbFile.FileDigest ";
$sql.= "WHERE BytesDownloaded <> TotalBytesForDownload ";
$sql.= "ORDER BY BytesDownloaded DESC, TotalBytesForDownload DESC";
$res = sqlsrv_query($conn, $sql);
$down = false; $summ=0;
while(sqlsrv_fetch($res)) {
if(!$down) {
$down = true;
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr><th>Имя файла</th><th>Дата</th><th>Скачано</th><th>Осталось</th><th>Всего</th></tr>\n"; }
$fname = sqlsrv_get_field($res,0)."";
$fdate = substr(sqlsrv_get_field($res,1,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$downed = sqlsrv_get_field($res,2)+0;
$fsize = sqlsrv_get_field($res,3)+0;
$summ = $summ + $fsize-$downed;
echo "<tr><td nowrap>".$fname."</td><td>".$fdate."</td>";
echo "<td align='right'>".showsize($downed)."</td>";
echo "<td align='right'>".showsize($fsize-$downed)."</td>";
echo "<td align='right'>".showsize($fsize)."</td></tr>\n"; }
if($down) {
echo "</table>\n";
echo "<p><b>Всего осталось скачать: ".showsize($summ)."</b></p>"; }
?>
<form name="frmfind" action="index.php" method="post">
<p><b>Найти по:</b>
<input type="text" name="find" value="<?= $find ?>" size="25" maxlength="50">
<input type="submit" name="submit" value="OK"><br>
<font size="2">Можно указать несколько ключевых слов через пробел, например: <b>xp x86 rus</b><br>
Для того чтобы скачать нужный файл - кликните мышью по его имени в таблице.</font></p>
</form>
<? if(!$down) { ?>
<script language="javascript">
document.all("find").focus();
document.all("find").select();
</script>
<? }
// Поиск обновлений по шаблону (описание в таблице tbPreComputedLocalizedProperty)
if(strlen($find)>1) {
$rows = 0;
$find = ereg_replace(" +"," ",$find);
$arr = explode(" ",$find); $cnt = count($arr);
$sql = "SET DATEFORMAT ymd; ";
$sql.= "SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest, FileName, Modified, Size ";
$sql.= " FROM tbFile F, tbFileOnServer S";
$sql.= " WHERE F.FileDigest=S.FileDigest AND ActualState<>1 AND IsEula=0 AND FileName LIKE '%".$arr[0]."%'";
if($cnt>0) { for($i=1;$i<$cnt;$i++) { $sql.= " AND FileName LIKE '%".$arr[$i]."%'"; }}
if($ord!="") $sql.= " ORDER BY ".$ord;
$res = sqlsrv_query($conn, $sql);
$find64 = base64_encode($find);
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr><th><a href='?find=$find64&ord=FileName%20asc'>Название</a></th>";
echo "<th><a href='?find=$find64&ord=Size%20asc'>Размер</a></th>";
echo "<th><a href='?find=$find64&ord=Modified%20desc'>Дата</a></th>";
echo "<th>Файл в WsusContent</th></tr>\n";
while(sqlsrv_fetch($res)) {
$rows++;
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$fname = sqlsrv_get_field($res,1)."";
$fdate = substr(sqlsrv_get_field($res,2,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$fsize = sqlsrv_get_field($res,3)+0;
$farr = explode(".",$fname);
$fext = $farr[count($farr)-1];
$source = $root.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) {
echo "<tr><td nowrap><a href='?file=".$fname."'>".$fname."</a></td>";
echo "<td align='right'>".showsize($fsize)."</td>";
echo "<td>".$fdate."</td>";
echo "<td align='right'>".basename($source)."</td>";
echo "</tr>\n"; }}
echo "</table>\n";
echo "<p><b>Итого показано: ".$rows." записей</b></p>\n";
sqlsrv_free_stmt($res); }
sqlsrv_close($conn); ?>
</body>
</html>
Последовательность инсталляции:
1) Установить Windows Server 2003 с последним пакетом обновления
2) Установить Windows Server Update Services 3.0 (x86 или x64)
http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=e4a868d7-a820-46a0-b4db-ed6aa4a336d9
3) Установить Microsoft SQL Server Native Client (x86 или x64)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=50b97994-8453-4998-8226-fa42ec403d17
по-русски: Собственный клиент Microsoft SQL Server:
http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=50b97994-8453-4998-8226-fa42ec403d17
4) Установить последнюю версию PHP на Internet IInformation Server, который использует WSUS, в режиме CGI
http://www.php.net/downloads.php
руководство: http://www.php.net/manual/ru/install.windows.iis.php
4.1.Каталог, в котором установился PHP (например C:\PHP) включаем в системную переменную окружения PATH.
4.2. Устанавливаем SQL Server 2005 Driver for PHP Cumulative Update в папку C:\PHP\ext
http://www.microsoft.com/downloads/details.aspx?FamilyID=61bf87e0-d031-466b-b09a-6597c21a2e2a&DisplayLang=en
4.3.В файле php.ini устанавливаем параметры:
short_open_tag = On
magic_quotes_gpc = On
extension_dir = c:/PHP/ext
doc_root = "c:\Inetpub\wwwroot"
cgi.force_redirect = 0
Отключаем все расширения php (extensions), т.к. они могут быть причиной "зависания" при запуске php-скриптов под IIS, но добавляем скачанное ранее php-расширение в php.ini
extension=php_sqlsrv_ts.dll
5.На папки C:\PHP и подпапки даем права на чтение пользователю IUSR_[имя компа] и группе IIS_WPG
6.Используя консоль администрирования SQL Server 2005 (если Вы установили базу WSUS [SUSDB] на него) или SQL Server Management Studio Express (если Вы используете локальную базу Windows Internal Database) дать права пользователю IUSR_[имя компа] на подключение и чтение данных базы SUSDB.
Microsoft SQL Server Management Studio Express
http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796
Подключиться к Windows Internal Database можно указав адрес сервера:
\\.\pipe\mssql$microsoft##ssee\sql\query
выбрать Windows Authentication и ввести логин и пароль администратора данного сервера.
7. В папку c:\Inetpub\wwwroot положить файл index.php
Код: <? include_once("inc/func.php");
$find=""; $file=""; $ord=""; $root="D:/WSUS/WsusContent/";
$server = '\\\\.\\pipe\\mssql$microsoft##ssee\\sql\\query';
$connectionInfo = array("Database"=>"SUSDB");
// Подключение к серверу
$conn = sqlsrv_connect($server, $connectionInfo);
if($conn === false) {
echo "Ошибка подключения к SUSDB!</br>";
echo "<pre>";
die(print_r(sqlsrv_errors(),true));
echo "</pre>\n";
exit; }
if(isset($_POST['find'])) $find = norm($_POST['find']);
elseif(isset($_GET['find'])) $find = base64_decode(norm($_GET['find']));
if(isset($_GET['file'])) $file = norm($_GET['file']);
if(isset($_GET['ord'])) $ord = norm($_GET['ord']);
if(strlen($file)>4) {
$sql = "SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest ";
$sql.= "FROM tbFile F, tbFileOnServer S ";
$sql.= "WHERE F.FileDigest=S.FileDigest AND ActualState<>1 AND IsEula=0 AND FileName='".$file."'";
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$farr = explode(".",$file);
$fext = $farr[count($farr)-1];
$source = $root.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) DownloadFile($source, $file); }
exit; }
?>
<html>
<head>
<meta http-equiv="Content-Type" CONTENT="text/html; charset=Windows-1251">
<meta http-equiv="pragma" content="nocache">
<title>Windows Server Update Services</title>
</head>
<body>
<? // Информация о сервере
$server_info = sqlsrv_server_info($conn);
if($server_info) {
echo "<pre>";
print_r($server_info);
echo "</pre>\n"; }
// Сейчас закачиваются
$sql = "SELECT FileName, Modified, BytesDownloaded, TotalBytesForDownload ";
$sql.= "FROM tbFileDownloadProgress INNER JOIN ";
$sql.= " tbFileOnServer ON tbFileDownloadProgress.RowID = tbFileOnServer.RowID INNER JOIN ";
$sql.= " tbFile ON tbFileOnServer.FileDigest = tbFile.FileDigest ";
$sql.= "WHERE BytesDownloaded <> TotalBytesForDownload ";
$sql.= "ORDER BY BytesDownloaded DESC, TotalBytesForDownload DESC";
$res = sqlsrv_query($conn, $sql);
$down = false; $summ=0;
while(sqlsrv_fetch($res)) {
if(!$down) {
$down = true;
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr><th>Имя файла</th><th>Дата</th><th>Скачано</th><th>Осталось</th><th>Всего</th></tr>\n"; }
$fname = sqlsrv_get_field($res,0)."";
$fdate = substr(sqlsrv_get_field($res,1,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$downed = sqlsrv_get_field($res,2)+0;
$fsize = sqlsrv_get_field($res,3)+0;
$summ = $summ + $fsize-$downed;
echo "<tr><td nowrap>".$fname."</td><td>".$fdate."</td>";
echo "<td align='right'>".showsize($downed)."</td>";
echo "<td align='right'>".showsize($fsize-$downed)."</td>";
echo "<td align='right'>".showsize($fsize)."</td></tr>\n"; }
if($down) {
echo "</table>\n";
echo "<p><b>Всего осталось скачать: ".showsize($summ)."</b></p>"; }
?>
<form name="frmfind" action="index.php" method="post">
<p><b>Найти по:</b>
<input type="text" name="find" value="<?= $find ?>" size="25" maxlength="50">
<input type="submit" name="submit" value="OK"><br>
<font size="2">Можно указать несколько ключевых слов через пробел, например: <b>xp x86 rus</b><br>
Для того чтобы скачать нужный файл - кликните мышью по его имени в таблице.</font></p>
</form>
<? if(!$down) { ?>
<script language="javascript">
document.all("find").focus();
document.all("find").select();
</script>
<? }
// Поиск обновлений по шаблону (описание в таблице tbPreComputedLocalizedProperty)
if(strlen($find)>1) {
$rows = 0;
$find = ereg_replace(" +"," ",$find);
$arr = explode(" ",$find); $cnt = count($arr);
$sql = "SET DATEFORMAT ymd; ";
$sql.= "SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest, FileName, Modified, Size ";
$sql.= " FROM tbFile F, tbFileOnServer S";
$sql.= " WHERE F.FileDigest=S.FileDigest AND ActualState<>1 AND IsEula=0 AND FileName LIKE '%".$arr[0]."%'";
if($cnt>0) { for($i=1;$i<$cnt;$i++) { $sql.= " AND FileName LIKE '%".$arr[$i]."%'"; }}
if($ord!="") $sql.= " ORDER BY ".$ord;
$res = sqlsrv_query($conn, $sql);
$find64 = base64_encode($find);
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr><th><a href='?find=$find64&ord=FileName%20asc'>Название</a></th>";
echo "<th><a href='?find=$find64&ord=Size%20asc'>Размер</a></th>";
echo "<th><a href='?find=$find64&ord=Modified%20desc'>Дата</a></th>";
echo "<th>Файл в WsusContent</th></tr>\n";
while(sqlsrv_fetch($res)) {
$rows++;
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$fname = sqlsrv_get_field($res,1)."";
$fdate = substr(sqlsrv_get_field($res,2,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$fsize = sqlsrv_get_field($res,3)+0;
$farr = explode(".",$fname);
$fext = $farr[count($farr)-1];
$source = $root.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) {
echo "<tr><td nowrap><a href='?file=".$fname."'>".$fname."</a></td>";
echo "<td align='right'>".showsize($fsize)."</td>";
echo "<td>".$fdate."</td>";
echo "<td align='right'>".basename($source)."</td>";
echo "</tr>\n"; }}
echo "</table>\n";
echo "<p><b>Итого показано: ".$rows." записей</b></p>\n";
sqlsrv_free_stmt($res); }
sqlsrv_close($conn); ?>
</body>
</html>
TroViX
Цитата:
Коды ошибок и их объяснение
0x800710DD
0x80244001
0x80244019
0х80246008
Источник
Цитата:
Error: Agent failed detecting with reason: 0x80244019
Коды ошибок и их объяснение
0x800710DD
0x80244001
0x80244019
0х80246008
Источник
а как узнать какие обновление во wsus уже скачаны, а какие скачиваются и сколько уже скачалось ?
Используя SQL Server Management Studio Express можно получить доступ к базе SUSDB, а там уже sql скрипт сочинить можно хоть для чего.
ScorpioSar
а проще? нет решений
а проще? нет решений
Цитата:
TroViX
Цитата:Error: Agent failed detecting with reason: 0x80244019
Коды ошибок и их объяснение
0x800710DD
0x80244001
0x80244019
0х80246008
Источник
проверил по нужной ошибке все пункты там указанные, все нормально было, но так и не хотели подрубаться к серваку.
помог другой способ =) банальная перестановка апдейт агента
1) стопорим апдейт сервис (в командной строке net stop wuauserv)
2) сносим папку %windir%\SoftwareDistribution
3) сносим ключь HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\SusClientId
4) скачиваем апдейт агент (windowsupdateagent30-x86.exe) и ставим на проблемные компы
5) в командной строке прописываем wuauclt /resetauthorization /detectnow для перерегистрации на wsus серваке и проверки новых обновлений сразу же.
только после этого пошли беспроблем регится на сервак и качать апдейты эти проблемные компы. Ура, наконец то можно теперь забить на wsus и обновления для всех компов =)
SyCraft
Цитата:
а разве в консоли "общие сведения" это не написано? или вы о чём то другом?
Цитата:
а как узнать какие обновление во wsus уже скачаны, а какие скачиваются и сколько уже скачалось ?
а разве в консоли "общие сведения" это не написано? или вы о чём то другом?
Вот тут
Интересный инструмент похожий как у ScorpioSar только на asp а не php.
Страничка показывает обновления находящиеся на WSUS с правильным именем.
Там же эти обновления можно скачать.
Делаю как там написано но при заходе на траницу получаю ошибку:
Cannot open database "SUSDB" requested by the login. The login failed.
Понимаю, что учетке "анонимного IIS" не хватает прав на доступ к базе. Но где прописать права не в курсе. Не общаюсь я с базами от MS.
При установке WSUS использовал SQLEXPRESS
При создании ODBC System DSN на страницес выбором сервера мне пришлось указать не localhost, а WSUS\SQLEXPRESS.
Прошу помощи.
Интересный инструмент похожий как у ScorpioSar только на asp а не php.
Страничка показывает обновления находящиеся на WSUS с правильным именем.
Там же эти обновления можно скачать.
Делаю как там написано но при заходе на траницу получаю ошибку:
Cannot open database "SUSDB" requested by the login. The login failed.
Понимаю, что учетке "анонимного IIS" не хватает прав на доступ к базе. Но где прописать права не в курсе. Не общаюсь я с базами от MS.
При установке WSUS использовал SQLEXPRESS
При создании ODBC System DSN на страницес выбором сервера мне пришлось указать не localhost, а WSUS\SQLEXPRESS.
Прошу помощи.
seva100
Есть предположение, что тулза для WSUS v2, а ты наверно юзаешь v3...
А возможно дело и не в этом.
Есть предположение, что тулза для WSUS v2, а ты наверно юзаешь v3...
А возможно дело и не в этом.
Обновил версию, теперь выводится список обновлений с описаниями
PS Скрипт для WSUS 3 и базы SUSDB на Windows Internal, но легко перенастраивается под другие варианты. Тем кто предпочитает ASP (а не PHP) думаю не составит особого труда переписать сей скрипт на ASP.
index.php
Код: <? include_once("inc/func.php");
// Настраиваемые параметры подключения
$wsusdir = "D:/WSUS/WsusContent/";
$wsusurl = "http://wsus:8530/Content/";
$connectionInfo = array("Database"=>"SUSDB");
$server = '\\\\.\\pipe\\mssql$microsoft##ssee\\sql\\query';
$find=""; $file=""; $ord=""; $act=""; $field="FileName"; $lang="1049";
$FIELDS = array("FileName"=>"Имя файла","Title"=>"Название","Description"=>"Описание");
$LANGS = array("1033"=>"английской","1049"=>"русской");
// Подключение к серверу
$conn = sqlsrv_connect($server, $connectionInfo);
if($conn === false) {
echo "Ошибка подключения к SUSDB!</br>";
echo "<pre>";
die(print_r(sqlsrv_errors(),true));
echo "</pre>\n";
exit; }
if(isset($_POST['field'])) $field = norm($_POST['field']);
if(isset($_POST['find'])) $find = norm($_POST['find']);
elseif(isset($_GET['find'])) $find = base64_decode(norm($_GET['find']));
if(isset($_POST['lang'])) $lang = norm($_POST['lang']);
if(isset($_GET['file'])) $file = norm($_GET['file']);
if(isset($_GET['act'])) $act = norm($_GET['act']);
if(isset($_GET['ord'])) $ord = norm($_GET['ord']);
if(strlen($file)>4) {
$sql = "SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest ";
$sql.= "FROM tbFile F, tbFileOnServer S ";
$sql.= "WHERE F.FileDigest=S.FileDigest AND ActualState<>1 AND IsEula=0 AND FileName='".$file."'";
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$farr = explode(".",$file);
$fext = $farr[count($farr)-1];
$source = $wsusdir.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) DownloadFile($source, $file); }
exit; }
?>
<html>
<head>
<meta http-equiv="Content-Type" CONTENT="text/html; charset=Windows-1251">
<meta http-equiv="pragma" content="nocache">
<title>Windows Server Update Services</title>
</head>
<body>
<? // Информация о сервере
$server_info = sqlsrv_server_info($conn);
if($server_info) {
echo "<pre>";
print_r($server_info);
echo "</pre>\n"; }
if($act=="") {
// Сейчас закачиваются в общем
$sql = "SELECT COUNT(1), SUM(BytesDownloaded), SUM(TotalBytesForDownload) FROM tbFileDownloadProgress ";
$sql.= "WHERE BytesDownloaded <> TotalBytesForDownload";
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$cnt = sqlsrv_get_field($res,0)+0;
$downed = sqlsrv_get_field($res,1)+0;
$full = sqlsrv_get_field($res,2)+0;
$remain = $full - $downed;
if($cnt>0) {
echo "<p><a href='?act=downed'>Сейчас закачивается $cnt обновлений,";
echo " скачано ".showsize($downed)." из ".showsize($full).", осталось ".showsize($remain).".</a></p>"; }}
}
// Список в закачке
if($act=="downed") {
$sql = "SELECT FileName, Modified, BytesDownloaded, TotalBytesForDownload ";
$sql.= "FROM tbFileDownloadProgress INNER JOIN ";
$sql.= " tbFileOnServer ON tbFileDownloadProgress.RowID = tbFileOnServer.RowID INNER JOIN ";
$sql.= " tbFile ON tbFileOnServer.FileDigest = tbFile.FileDigest ";
$sql.= "WHERE BytesDownloaded <> TotalBytesForDownload ";
$sql.= "ORDER BY BytesDownloaded DESC, TotalBytesForDownload DESC";
$res = sqlsrv_query($conn, $sql);
$down = false; $summ=0;
while(sqlsrv_fetch($res)) {
if(!$down) {
$down = true;
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr><th>Имя файла</th><th>Дата</th><th>Скачано</th><th>Осталось</th><th>Всего</th></tr>\n"; }
$fname = sqlsrv_get_field($res,0)."";
$fdate = substr(sqlsrv_get_field($res,1,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$downed = sqlsrv_get_field($res,2)+0;
$fsize = sqlsrv_get_field($res,3)+0;
$summ = $summ + $fsize - $downed;
echo "<tr><td nowrap>".$fname."</td><td>".$fdate."</td>";
echo "<td align='right'>".showsize($downed)."</td>";
echo "<td align='right'>".showsize($fsize-$downed)."</td>";
echo "<td align='right'>".showsize($fsize)."</td></tr>\n"; }
if($down) {
echo "</table>\n";
echo "<p><b>Всего осталось скачать: ".showsize($summ)."</b></p>"; }}
?>
<form name="frmfind" action="index.php" method="post">
<p><b><? ComboBox("field",$FIELDS,$field,true); ?> содержит
<input type="text" name="find" value="<?= $find ?>" size="25" maxlength="50"> для
<? ComboBox("lang",$LANGS,$lang,true); ?> версии
<input type="submit" value="Искать"></b><br>
<font size="2">Можно указать несколько ключевых слов через пробел, например: <b>XP x86</b><br>
Для того чтобы скачать нужный файл - кликните мышью по его имени в таблице.</font></p>
</form>
<? if($act=="") { ?>
<script language="javascript">
document.all("find").focus();
document.all("find").select();
</script>
<? }
// Поиск обновлений по шаблону (описание в таблице tbPreComputedLocalizedProperty)
if(strlen($find)>1) {
$find = ereg_replace(" +"," ",$find);
$arr = explode(" ",$find); $cnt = count($arr);
$table = "
FROM tbFile F, tbFileOnServer S, tbFileForRevision FR, tbRevision R, tbBundleDependency B,
tbRevision BR, tbUpdate U, tbPreComputedLocalizedProperty L, tbRevisionLanguage RL
WHERE F.FileDigest = S.FileDigest AND S.ActualState<>1 AND F.FileDigest = FR.FileDigest AND IsEula=0
AND R.RevisionID = FR.RevisionID AND R.IsLatestRevision = 1
AND B.BundledRevisionID = FR.RevisionID AND BR.RevisionID = B.RevisionID
AND U.LocalUpdateID = BR.LocalUpdateID AND L.UpdateID = U.UpdateID
AND L.ShortLanguage = 'ru' AND RL.RevisionID = R.RevisionID
AND RL.LanguageID IN(0,$lang) AND RL.Expanded = 0 AND $field LIKE '%".$arr[0]."%'";
if($cnt>0) { for($i=1;$i<$cnt;$i++) { $table.= " AND $field LIKE '%".$arr[$i]."%'"; }}
$sql = "SELECT COUNT(1), SUM(F.Size)".$table;
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$updates = sqlsrv_get_field($res,0)+0;
$fullsize = sqlsrv_get_field($res,1)+0; }
$sql = "SET DATEFORMAT ymd;
SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest, FileName, Modified, Size, L.Title, L.Description";
$sql.= $table;
if($ord!="") $sql.= " ORDER BY ".$ord;
$res = sqlsrv_query($conn, $sql);
$find64 = base64_encode($find);
if($updates>100) echo "<b>Показано 1-100 из ".$updates." обновлений (всего ".showsize($fullsize).")</b>\n";
else echo "<b>Найдено ".$updates." обновлений (".showsize($fullsize).")</b>\n";
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr bgcolor='#CCCCCC'><th><a href='?find=$find64&ord=FileName%20asc'>Описание обновления</a></th>";
echo "<th><a href='?find=$find64&ord=Modified%20desc'>Дата</a></th>";
echo "</tr>\n";
while(sqlsrv_fetch($res)) {
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$fname = sqlsrv_get_field($res,1)."";
$fdate = substr(sqlsrv_get_field($res,2,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$fsize = sqlsrv_get_field($res,3)+0;
$title = sqlsrv_get_field($res,4)."";
$desc = sqlsrv_get_field($res,5)."";
$farr = explode(".",$fname);
$fext = $farr[count($farr)-1];
$source = $wsusdir.substr($hash,-2)."/".$hash.".".$fext;
$url = $wsusurl.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) {
echo "<tr><td><font size='2'><b>$title</b><br>$desc<br><i>Скачать:</i> ";
echo "<a href='?file=$fname'>$fname</a> (".showsize($fsize)."), ";
echo "<i>в WsusContent:</i> <a href='$url'>".basename($source)."</a></font></td>";
echo "<td>".$fdate."</td>";
echo "</tr>\n"; }}
echo "</table>\n";
sqlsrv_free_stmt($res); }
sqlsrv_close($conn); ?>
</body>
</html>
PS Скрипт для WSUS 3 и базы SUSDB на Windows Internal, но легко перенастраивается под другие варианты. Тем кто предпочитает ASP (а не PHP) думаю не составит особого труда переписать сей скрипт на ASP.
index.php
Код: <? include_once("inc/func.php");
// Настраиваемые параметры подключения
$wsusdir = "D:/WSUS/WsusContent/";
$wsusurl = "http://wsus:8530/Content/";
$connectionInfo = array("Database"=>"SUSDB");
$server = '\\\\.\\pipe\\mssql$microsoft##ssee\\sql\\query';
$find=""; $file=""; $ord=""; $act=""; $field="FileName"; $lang="1049";
$FIELDS = array("FileName"=>"Имя файла","Title"=>"Название","Description"=>"Описание");
$LANGS = array("1033"=>"английской","1049"=>"русской");
// Подключение к серверу
$conn = sqlsrv_connect($server, $connectionInfo);
if($conn === false) {
echo "Ошибка подключения к SUSDB!</br>";
echo "<pre>";
die(print_r(sqlsrv_errors(),true));
echo "</pre>\n";
exit; }
if(isset($_POST['field'])) $field = norm($_POST['field']);
if(isset($_POST['find'])) $find = norm($_POST['find']);
elseif(isset($_GET['find'])) $find = base64_decode(norm($_GET['find']));
if(isset($_POST['lang'])) $lang = norm($_POST['lang']);
if(isset($_GET['file'])) $file = norm($_GET['file']);
if(isset($_GET['act'])) $act = norm($_GET['act']);
if(isset($_GET['ord'])) $ord = norm($_GET['ord']);
if(strlen($file)>4) {
$sql = "SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest ";
$sql.= "FROM tbFile F, tbFileOnServer S ";
$sql.= "WHERE F.FileDigest=S.FileDigest AND ActualState<>1 AND IsEula=0 AND FileName='".$file."'";
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$farr = explode(".",$file);
$fext = $farr[count($farr)-1];
$source = $wsusdir.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) DownloadFile($source, $file); }
exit; }
?>
<html>
<head>
<meta http-equiv="Content-Type" CONTENT="text/html; charset=Windows-1251">
<meta http-equiv="pragma" content="nocache">
<title>Windows Server Update Services</title>
</head>
<body>
<? // Информация о сервере
$server_info = sqlsrv_server_info($conn);
if($server_info) {
echo "<pre>";
print_r($server_info);
echo "</pre>\n"; }
if($act=="") {
// Сейчас закачиваются в общем
$sql = "SELECT COUNT(1), SUM(BytesDownloaded), SUM(TotalBytesForDownload) FROM tbFileDownloadProgress ";
$sql.= "WHERE BytesDownloaded <> TotalBytesForDownload";
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$cnt = sqlsrv_get_field($res,0)+0;
$downed = sqlsrv_get_field($res,1)+0;
$full = sqlsrv_get_field($res,2)+0;
$remain = $full - $downed;
if($cnt>0) {
echo "<p><a href='?act=downed'>Сейчас закачивается $cnt обновлений,";
echo " скачано ".showsize($downed)." из ".showsize($full).", осталось ".showsize($remain).".</a></p>"; }}
}
// Список в закачке
if($act=="downed") {
$sql = "SELECT FileName, Modified, BytesDownloaded, TotalBytesForDownload ";
$sql.= "FROM tbFileDownloadProgress INNER JOIN ";
$sql.= " tbFileOnServer ON tbFileDownloadProgress.RowID = tbFileOnServer.RowID INNER JOIN ";
$sql.= " tbFile ON tbFileOnServer.FileDigest = tbFile.FileDigest ";
$sql.= "WHERE BytesDownloaded <> TotalBytesForDownload ";
$sql.= "ORDER BY BytesDownloaded DESC, TotalBytesForDownload DESC";
$res = sqlsrv_query($conn, $sql);
$down = false; $summ=0;
while(sqlsrv_fetch($res)) {
if(!$down) {
$down = true;
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr><th>Имя файла</th><th>Дата</th><th>Скачано</th><th>Осталось</th><th>Всего</th></tr>\n"; }
$fname = sqlsrv_get_field($res,0)."";
$fdate = substr(sqlsrv_get_field($res,1,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$downed = sqlsrv_get_field($res,2)+0;
$fsize = sqlsrv_get_field($res,3)+0;
$summ = $summ + $fsize - $downed;
echo "<tr><td nowrap>".$fname."</td><td>".$fdate."</td>";
echo "<td align='right'>".showsize($downed)."</td>";
echo "<td align='right'>".showsize($fsize-$downed)."</td>";
echo "<td align='right'>".showsize($fsize)."</td></tr>\n"; }
if($down) {
echo "</table>\n";
echo "<p><b>Всего осталось скачать: ".showsize($summ)."</b></p>"; }}
?>
<form name="frmfind" action="index.php" method="post">
<p><b><? ComboBox("field",$FIELDS,$field,true); ?> содержит
<input type="text" name="find" value="<?= $find ?>" size="25" maxlength="50"> для
<? ComboBox("lang",$LANGS,$lang,true); ?> версии
<input type="submit" value="Искать"></b><br>
<font size="2">Можно указать несколько ключевых слов через пробел, например: <b>XP x86</b><br>
Для того чтобы скачать нужный файл - кликните мышью по его имени в таблице.</font></p>
</form>
<? if($act=="") { ?>
<script language="javascript">
document.all("find").focus();
document.all("find").select();
</script>
<? }
// Поиск обновлений по шаблону (описание в таблице tbPreComputedLocalizedProperty)
if(strlen($find)>1) {
$find = ereg_replace(" +"," ",$find);
$arr = explode(" ",$find); $cnt = count($arr);
$table = "
FROM tbFile F, tbFileOnServer S, tbFileForRevision FR, tbRevision R, tbBundleDependency B,
tbRevision BR, tbUpdate U, tbPreComputedLocalizedProperty L, tbRevisionLanguage RL
WHERE F.FileDigest = S.FileDigest AND S.ActualState<>1 AND F.FileDigest = FR.FileDigest AND IsEula=0
AND R.RevisionID = FR.RevisionID AND R.IsLatestRevision = 1
AND B.BundledRevisionID = FR.RevisionID AND BR.RevisionID = B.RevisionID
AND U.LocalUpdateID = BR.LocalUpdateID AND L.UpdateID = U.UpdateID
AND L.ShortLanguage = 'ru' AND RL.RevisionID = R.RevisionID
AND RL.LanguageID IN(0,$lang) AND RL.Expanded = 0 AND $field LIKE '%".$arr[0]."%'";
if($cnt>0) { for($i=1;$i<$cnt;$i++) { $table.= " AND $field LIKE '%".$arr[$i]."%'"; }}
$sql = "SELECT COUNT(1), SUM(F.Size)".$table;
$res = sqlsrv_query($conn, $sql);
if(sqlsrv_fetch($res)) {
$updates = sqlsrv_get_field($res,0)+0;
$fullsize = sqlsrv_get_field($res,1)+0; }
$sql = "SET DATEFORMAT ymd;
SELECT TOP 100 sys.fn_varbintohexstr(F.FileDigest) AS Digest, FileName, Modified, Size, L.Title, L.Description";
$sql.= $table;
if($ord!="") $sql.= " ORDER BY ".$ord;
$res = sqlsrv_query($conn, $sql);
$find64 = base64_encode($find);
if($updates>100) echo "<b>Показано 1-100 из ".$updates." обновлений (всего ".showsize($fullsize).")</b>\n";
else echo "<b>Найдено ".$updates." обновлений (".showsize($fullsize).")</b>\n";
echo "<table cellpadding='3' cellspacing='0' border='1'>\n";
echo "<tr bgcolor='#CCCCCC'><th><a href='?find=$find64&ord=FileName%20asc'>Описание обновления</a></th>";
echo "<th><a href='?find=$find64&ord=Modified%20desc'>Дата</a></th>";
echo "</tr>\n";
while(sqlsrv_fetch($res)) {
$hash = strtoupper(substr(sqlsrv_get_field($res,0,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),2));
$fname = sqlsrv_get_field($res,1)."";
$fdate = substr(sqlsrv_get_field($res,2,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)),0,10);
$fsize = sqlsrv_get_field($res,3)+0;
$title = sqlsrv_get_field($res,4)."";
$desc = sqlsrv_get_field($res,5)."";
$farr = explode(".",$fname);
$fext = $farr[count($farr)-1];
$source = $wsusdir.substr($hash,-2)."/".$hash.".".$fext;
$url = $wsusurl.substr($hash,-2)."/".$hash.".".$fext;
if(file_exists($source)) {
echo "<tr><td><font size='2'><b>$title</b><br>$desc<br><i>Скачать:</i> ";
echo "<a href='?file=$fname'>$fname</a> (".showsize($fsize)."), ";
echo "<i>в WsusContent:</i> <a href='$url'>".basename($source)."</a></font></td>";
echo "<td>".$fdate."</td>";
echo "</tr>\n"; }}
echo "</table>\n";
sqlsrv_free_stmt($res); }
sqlsrv_close($conn); ?>
</body>
</html>
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
Предыдущая тема: Общие вопросы про AD (Active Directory) - часть II
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.