Oleg_Kurilin
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Решил поделиться некоторыми наработками. В эпоху SUS-а доступ к файлам обновления был достаточно простой, по имени можно было найти. А вот в WSUS-е там только хеши, и искать очень затруднительно. Так вот, что-бы сделать что-то похожее, я написал несколько скриптов, которые создают директорию в content-директории и создают там жесткие линки с человеческими именами, по сути получает зеркало. Работает эти скрипты только на 2003, по тому как там используется утилита fsutil. В файле CreateHardLinks.cmd задайте имя сервера базы данных. CreateHardLinks.cmd Код: @echo off SET ServerName=MSSQL "%programfiles%\Update Services\tools\osql\osql.exe" -E -S %ServerName% -d SUSDB -b -n -i file1.SQL -o file1.cmd -w 500 "%programfiles%\Update Services\tools\osql\osql.exe" -E -S %ServerName% -d SUSDB -b -n -i file2.SQL -o file2.cmd -w 500 cmd /Q /C file1.cmd cmd /Q /C file2.cmd del /q file1.cmd del /q file2.cmd | file1.sql Код: SELECT CAST('mkdir ' + path AS varchar(490)) AS CommandLines FROM (SELECT tbConfigurationB.LocalContentCacheLocation + '\' + REPLACE(SUBSTRING(tbFile.MUURL, 8, LEN(tbFile.MUURL) - 6 - CHARINDEX('/', REVERSE(tbFile.MUURL), 1)), '/', '\') AS path FROM tbFile, tbConfigurationB) file1 GROUP BY Path | file2.sql Код: SELECT CAST('fsutil hardlink create ' + path + name + ' ' + path + SUBSTRING(base, bchar19 / 16 + 1, 1) + SUBSTRING(base, bchar19 % 16 + 1, 1) + '\' + SUBSTRING(base, bchar00 / 16 + 1, 1) + SUBSTRING(base, bchar00 % 16 + 1, 1) + SUBSTRING(base, bchar01 / 16 + 1, 1) + SUBSTRING(base, bchar01 % 16 + 1, 1) + SUBSTRING(base, bchar02 / 16 + 1, 1) + SUBSTRING(base, bchar02 % 16 + 1, 1) + SUBSTRING(base, bchar03 / 16 + 1, 1) + SUBSTRING(base, bchar03 % 16 + 1, 1) + SUBSTRING(base, bchar04 / 16 + 1, 1) + SUBSTRING(base, bchar04 % 16 + 1, 1) + SUBSTRING(base, bchar05 / 16 + 1, 1) + SUBSTRING(base, bchar05 % 16 + 1, 1) + SUBSTRING(base, bchar06 / 16 + 1, 1) + SUBSTRING(base, bchar06 % 16 + 1, 1) + SUBSTRING(base, bchar07 / 16 + 1, 1) + SUBSTRING(base, bchar07 % 16 + 1, 1) + SUBSTRING(base, bchar08 / 16 + 1, 1) + SUBSTRING(base, bchar08 % 16 + 1, 1) + SUBSTRING(base, bchar09 / 16 + 1, 1) + SUBSTRING(base, bchar09 % 16 + 1, 1) + SUBSTRING(base, bchar10 / 16 + 1, 1) + SUBSTRING(base, bchar10 % 16 + 1, 1) + SUBSTRING(base, bchar11 / 16 + 1, 1) + SUBSTRING(base, bchar11 % 16 + 1, 1) + SUBSTRING(base, bchar12 / 16 + 1, 1) + SUBSTRING(base, bchar12 % 16 + 1, 1) + SUBSTRING(base, bchar13 / 16 + 1, 1) + SUBSTRING(base, bchar13 % 16 + 1, 1) + SUBSTRING(base, bchar14 / 16 + 1, 1) + SUBSTRING(base, bchar14 % 16 + 1, 1) + SUBSTRING(base, bchar15 / 16 + 1, 1) + SUBSTRING(base, bchar15 % 16 + 1, 1) + SUBSTRING(base, bchar16 / 16 + 1, 1) + SUBSTRING(base, bchar16 % 16 + 1, 1) + SUBSTRING(base, bchar17 / 16 + 1, 1) + SUBSTRING(base, bchar17 % 16 + 1, 1) + SUBSTRING(base, bchar18 / 16 + 1, 1) + SUBSTRING(base, bchar18 % 16 + 1, 1) + SUBSTRING(base, bchar19 / 16 + 1, 1) + SUBSTRING(base, bchar19 % 16 + 1, 1) + extension AS varchar(490)) AS CommandLines FROM (SELECT substring(tbFile.FileDigest, 1, 1) AS bchar00, substring(tbFile.FileDigest, 2, 1) AS bchar01, substring(tbFile.FileDigest, 3, 1) AS bchar02, substring(tbFile.FileDigest, 4, 1) AS bchar03, substring(tbFile.FileDigest, 5, 1) AS bchar04, substring(tbFile.FileDigest, 6, 1) AS bchar05, substring(tbFile.FileDigest, 7, 1) AS bchar06, substring(tbFile.FileDigest, 8, 1) AS bchar07, substring(tbFile.FileDigest, 9, 1) AS bchar08, substring(tbFile.FileDigest, 10, 1) AS bchar09, substring(tbFile.FileDigest, 11, 1) AS bchar10, substring(tbFile.FileDigest, 12, 1) AS bchar11, substring(tbFile.FileDigest, 13, 1) AS bchar12, substring(tbFile.FileDigest, 14, 1) AS bchar13, substring(tbFile.FileDigest, 15, 1) AS bchar14, substring(tbFile.FileDigest, 16, 1) AS bchar15, substring(tbFile.FileDigest, 17, 1) AS bchar16, substring(tbFile.FileDigest, 18, 1) AS bchar17, substring(tbFile.FileDigest, 19, 1) AS bchar18, substring(tbFile.FileDigest, 20, 1) AS bchar19, tbConfigurationB.LocalContentCacheLocation + '\' AS path, REPLACE(SUBSTRING(tbFile.MUURL, 8, LEN(tbFile.MUURL) - 7), '/', '\') AS name, SUBSTRING(tbFile.MUURL, LEN(tbFile.MUURL) + 1 - CHARINDEX('.', REVERSE(tbFile.MUURL), 1), CHARINDEX('.', REVERSE(tbFile.MUURL), 1)) AS extension, '0123456789ABCDEF' AS base FROM tbFile, tbFileOnServer, tbConfigurationB WHERE (tbFile.FileDigest = tbFileOnServer.FileDigest) AND (tbFileOnServer.ActualState <> 1)) file2 | Добавлено: А, чуть не забыл. Файлы будут доступны по адресу http://<WSUS-server>/Content/www.download.windowsupdate.com/ И перед тем как повторно запускать этот скрипт (CreateHardLinks.cmd) нужно удалить директорию www.download.windowsupdate.com (та что в WSUS\WsusContent) |