Давно следовало это написать, но почему то постоянно вылетало из головы.
Если по каким то причинам вы попали в мой блог также крайне рекомендую для прочтения блог моего коллеги.
Там можно найти множество полезнейших скриптов на Powershell, заметки по администрированию и не только.
четверг, 2 декабря 2010 г.
воскресенье, 28 ноября 2010 г.
Реестр и msiexec
Недавно у меня появилась задача удалять софт скриптами, причем некоторый софт упорно не желал контактировать напрямую с msiexec /x, а желал быть деинсталлированным через свои собственные setup.exe и иже с ними. Конечно же можно было бы просьбу этих программ удовлетворить, но тогда пакет деинсталляции пришлось писать под каждый конкретный софт, он бы занимал место и вообще слишком много внимания одной программе когда у нас их сотня на удаление.
Решено было сделать скрипт который бы просто шерстил определенным образом заданные ветки реестра и удалял оттуда информацию.
И тут я столкнулся с одной занятной ситуацией.
Решено было сделать скрипт который бы просто шерстил определенным образом заданные ветки реестра и удалял оттуда информацию.
И тут я столкнулся с одной занятной ситуацией.
Как всем известно информация об инсталляции хранится в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall .
Однако на этапе удаления Photoshop CS3 в appwiz.cpl он тем не менее оставался. Почему? Поиски ответа на этот вопрос по реестру привели нас к этой ветке - HKEY_CLASSES_ROOT\Installer\Products .
В соседней ветке HKEY_CLASSES_ROOT\Installer\Features и HKEY_CLASSES_ROOT\Installer\Components также находится информация об установке, но уже менее интересная для нас.
Все работало просто отлично пока не появилась задача на некоторых компьютерах где софт был удален таким варварским способом его восстановить. Некоторые из программ, в частности тот же самый Photoshop CS3, начали утверждать что они уже установлены и было бы неплохо им сделать repair или удалить. Конечно же и тот и другой процесс завершались либо с ошибкой либо со статусом 0 и таким же количеством реально выполненных работ.
Поиски ответа на вопрос как такое может быть привели нас к ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\
Структура разделов там такая же как в HKEY_CLASSES_ROOT\Installer\
Также инсталляция может быть выполнена исключительно из под пользователя, тогда вместо S-1-5-18 надо покопаться в разделе с sid'ом пользователя. Для конвертации sid'а в нормальное имя пользователя можно воспользоваться специальной программой от Sysinternals/Microsoft
Итак для полного удаления всех следов выполненной инсталляции надо удалить соответствующие разделы в ветках реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_CLASSES_ROOT\Installer\Features
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\
have fun!
четверг, 8 июля 2010 г.
Первый старт IE7/IE8
При первом же после установки старте IE7/IE8 нас выкидывает на специальную страницу или открывается специальное окошко где предлагается настроить ряд параметров.
Отключается это следующим образом:
IE7
источник
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"RunOnceComplete"=dword:00000001
"RunOnceHasShown"=dword:00000001
IE8
источник
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"IE8RunOnceLastShown"=dword:00000001
"IE8RunOncePerInstallCompleted"=dword:00000001
"IE8RunOnceCompletionTime"=hex:
"IE8TourShown"=dword:00000001
"IE8TourShownTime"=hex:
"IE8RunOnceLastShown_TIMESTAMP"=hex:
Либо
Отключается это следующим образом:
IE7
источник
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"RunOnceComplete"=dword:00000001
"RunOnceHasShown"=dword:00000001
IE8
источник
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"IE8RunOnceLastShown"=dword:00000001
"IE8RunOncePerInstallCompleted"=dword:00000001
"IE8RunOnceCompletionTime"=hex:
"IE8TourShown"=dword:00000001
"IE8TourShownTime"=hex:
"IE8RunOnceLastShown_TIMESTAMP"=hex:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Internet Explorer\Main]
"DisableFirstRunCustomize"=dword:00000001
Последнее, как легко можно понять, подходит для распространения через GP.
Adobe CS3
Была поставлена задача создать пакет для установки Adobe Illustrator CS3.
Покопавшись чуток в Adobe.KB был обнаружен способ ставить его в silent-режиме. Способ в теории должен работать и в остальных продуктах CS3.
Оригинальные ссылки на KB - тут и тут
Ниже информация - компиляция этих статей в работающий пример.
Для развертывания в silent-режиме нам потребуется определенным образом написанный .xml-файл.
Покопавшись чуток в Adobe.KB был обнаружен способ ставить его в silent-режиме. Способ в теории должен работать и в остальных продуктах CS3.
Оригинальные ссылки на KB - тут и тут
Ниже информация - компиляция этих статей в работающий пример.
Для развертывания в silent-режиме нам потребуется определенным образом написанный .xml-файл.
Ниже приведен листинг моего файла.
<?xml version="1.0" encoding="utf-8"?>
<Deployment><Properties><Property name="installLanguage">ru_RU</Property>
</Properties>
<Configuration>
<Payload adobeCode="{EDD49E1F-D38B-4F1B-9DFA-38E0BE39811A}">
<Data key="Serial" protected="0">103410141445928816872382</Data>
<Data key="Registration">Suppress</Data>
<Data key="EULA">Suppress</Data>
<Data key="Updates">Suppress</Data>
<Action>install</Action>
</Payload>
</Configuration>
</Deployment>
Конечно же нули меняются на свой серийный ключ. Как получить protected-ключ информацию пока не нашел.
Также в секции Deployment доступен ключ , но по каким то причинам он отказывается принимать %programfiles%, а имхо абсолютные пути это моветон.
<Deployment><Properties><Property name="installLanguage">ru_RU</Property>
</Properties>
<Configuration>
<Payload adobeCode="{EDD49E1F-D38B-4F1B-9DFA-38E0BE39811A}">
<Data key="Serial" protected="0">103410141445928816872382</Data>
<Data key="Registration">Suppress</Data>
<Data key="EULA">Suppress</Data>
<Data key="Updates">Suppress</Data>
<Action>install</Action>
</Payload>
</Configuration>
</Deployment>
Конечно же нули меняются на свой серийный ключ. Как получить protected-ключ информацию пока не нашел.
Также в секции Deployment доступен ключ , но по каким то причинам он отказывается принимать %programfiles%, а имхо абсолютные пути это моветон.
Что означает секция пока не очень ясно, это значение было в файле Deployment.xml и вполне возможно является обязательным.
Жирным выделена часть которой, согласно KB, достаточно для silent-инсталляции.
Используется файл следующим образом:
Жирным выделена часть которой, согласно KB, достаточно для silent-инсталляции.
Используется файл следующим образом:
cmd /c Setup.exe --mode=silent --deploymentFile="install.xml" --skipProcessCheck=1
Что делает последний ключ выяснить не удалось, но без него, почему-то, процесс стартовать не захотел.
По завершении процесса будет выдан exit-code, принимающий одно из следующих значений:
• Exit code: 0 No errors encountered
• Exit code: 1 Unable to parse command line
• Exit code: 2 Unknown UI mode specified
• Exit code: 6 Silent workflow completed with errors
• Exit code: 7 Unable to complete the silent workflow
• Exit code: 8 Exit with restart needed
• Exit code: 9 Unsupported OS
• Exit code: 10 Unsupported file system
• Exit code: 11 Another instance of Setup is running
Что делает последний ключ выяснить не удалось, но без него, почему-то, процесс стартовать не захотел.
По завершении процесса будет выдан exit-code, принимающий одно из следующих значений:
• Exit code: 0 No errors encountered
• Exit code: 1 Unable to parse command line
• Exit code: 2 Unknown UI mode specified
• Exit code: 6 Silent workflow completed with errors
• Exit code: 7 Unable to complete the silent workflow
• Exit code: 8 Exit with restart needed
• Exit code: 9 Unsupported OS
• Exit code: 10 Unsupported file system
• Exit code: 11 Another instance of Setup is running
понедельник, 5 июля 2010 г.
По-компонентное удаление Office 2007
Иногда бывает что инсталляция Office 2007 внезнапно прерывается. Предположим что при этом не срабатывает rollout. Часть компонентов установлена, но какие - сказать сложно. Удалить их также весьма затруднительно, надо перекапывать реестр на предмет ключей для деинсталляции каждого компонента (как известно каждый компонент Office 2007 представляет собой отдельный инсталлятор). Выясняется что существует специальный инструмент для удаления MS Office 2007.
По ссылке можно найти эти инструменты.
Инструмент представляет из себя .msi-пакет, к сожалению без silent-режима. Не очень удобно для удаленной работы. Если попробовать установить этот fixit-пакет то он в папке %temp% создаст папке OffScrub07 где будут располагаться логи выполнения задачи и папку fixit где располагается собственно сам скрипт, выполняющий поставленную задачу.
Скрипт имеет /silent-ключи, так что его куда интереснее использовать отдельно от пакета.
Скачать его можно по ссылке.
По его выполнению с ключем /? выдается следующий текст:
OffScrub07 V 1.16
Copyright (c) Microsoft Corporation. All Rights Reserved
OffScrub07 helps to remove Office 2007 when a regular uninstall is no longer pos
sible
Usage: OffScrub07.vbs [List of config ProductIDs] [Options]
OffScrub07.vbs ALL ' Remove all Office 2007 products
OffScrub07.vbs ProPlus,Project ' Remove ProPlus and Project
OffScrub07.vbs ALL,OSE ' Remove all products & OSE Service
/Bypass [List of stage#] ' List of stages that should not run
1 = Component Detection
2 = Setup.exe
3 = Msiexec.exe
4 = CleanUp of additonal files and registry settings
/? ' Displays this help
/Force ' Forces termination of running processes. May cause data loss!
/Log [LogfolderPath] ' Custom folder for log files
/NoCancel ' Setup.exe and Msiexec.exe have no Cancel button
/OSE ' Forces removal of the Office Source Engine service
/Quiet ' Setup.exe and Msiexec.exe run quiet with no UI
/Preview ' Run this script to preview what would get removed
После исполнения все компоненты MS Office 2007, а с ключем ALL еще и пакеты совместимости 2007 для 2003, Visio Viewer (возможно еще Visio и Project, но пока проверить не удалось), будут удалены. Также будет удален кэш установки в папки MSOCache и ярлыки. Забавный факт - у меня был подключен винчестер с другого компьютера. Скрипт прошерстил его и удалил все ярлыки Office.
Удачных инсталляций!
По ссылке можно найти эти инструменты.
Инструмент представляет из себя .msi-пакет, к сожалению без silent-режима. Не очень удобно для удаленной работы. Если попробовать установить этот fixit-пакет то он в папке %temp% создаст папке OffScrub07 где будут располагаться логи выполнения задачи и папку fixit где располагается собственно сам скрипт, выполняющий поставленную задачу.
Скрипт имеет /silent-ключи, так что его куда интереснее использовать отдельно от пакета.
Скачать его можно по ссылке.
По его выполнению с ключем /? выдается следующий текст:
OffScrub07 V 1.16
Copyright (c) Microsoft Corporation. All Rights Reserved
OffScrub07 helps to remove Office 2007 when a regular uninstall is no longer pos
sible
Usage: OffScrub07.vbs [List of config ProductIDs] [Options]
OffScrub07.vbs ALL ' Remove all Office 2007 products
OffScrub07.vbs ProPlus,Project ' Remove ProPlus and Project
OffScrub07.vbs ALL,OSE ' Remove all products & OSE Service
/Bypass [List of stage#] ' List of stages that should not run
1 = Component Detection
2 = Setup.exe
3 = Msiexec.exe
4 = CleanUp of additonal files and registry settings
/? ' Displays this help
/Force ' Forces termination of running processes. May cause data loss!
/Log [LogfolderPath] ' Custom folder for log files
/NoCancel ' Setup.exe and Msiexec.exe have no Cancel button
/OSE ' Forces removal of the Office Source Engine service
/Quiet ' Setup.exe and Msiexec.exe run quiet with no UI
/Preview ' Run this script to preview what would get removed
После исполнения все компоненты MS Office 2007, а с ключем ALL еще и пакеты совместимости 2007 для 2003, Visio Viewer (возможно еще Visio и Project, но пока проверить не удалось), будут удалены. Также будет удален кэш установки в папки MSOCache и ярлыки. Забавный факт - у меня был подключен винчестер с другого компьютера. Скрипт прошерстил его и удалил все ярлыки Office.
Удачных инсталляций!
вторник, 29 июня 2010 г.
Создание ярлыков из консоли
Периодически надо создавать что-то вроде доморощенных инсталляторов.
Обычно в такой ситуации вполне хватает функционала WinRAR. Можно распаковать программу в нужную папку, выполнить какие-то действия и создать ярлык. Недавно столкнулся с тем что надо больше опций при создании ярлыка и при этом сохранить автоматизацию.
Поисках немного в Интернете наткнулся на такую вот статью:
http://www.xxcopy.com/xxcopy38.htm
В статье описывается программа XXMKLINK и даются ссылки на ее скачивание.
Программа предназначена для создания ярлыков в cmd, что удобно для развертывания пакетов с помощью скриптов.
Обычно в такой ситуации вполне хватает функционала WinRAR. Можно распаковать программу в нужную папку, выполнить какие-то действия и создать ярлык. Недавно столкнулся с тем что надо больше опций при создании ярлыка и при этом сохранить автоматизацию.
Поисках немного в Интернете наткнулся на такую вот статью:
http://www.xxcopy.com/xxcopy38.htm
В статье описывается программа XXMKLINK и даются ссылки на ее скачивание.
Программа предназначена для создания ярлыков в cmd, что удобно для развертывания пакетов с помощью скриптов.
четверг, 24 июня 2010 г.
Поиск компьютеров без определенного ПО
Довольно удобный способ развертывать новые компьютеры - создать коллекции компьютеров без определенного программного обеспечения и назначать на них установку оного ПО.
Компьютер попадает в такую коллекцию, устанавливается ПО, проходит инвентаризация и компьютер вылетает из коллекции.
Такая коллекция описана в официальном KB по адресу https://kb.altiris.com/display/1/kb/article.asp?aid=53318
Ниже пример SQL запроса из KB
select * from vComputer r
Одно из преимуществ Altiris - есть возможность делать исключения из коллекций компьютеров других коллекций.
Учитывая описанную выше схему можно создавать группы исключений для установки определенного ПО.
Компьютер попадает в такую коллекцию, устанавливается ПО, проходит инвентаризация и компьютер вылетает из коллекции.
Такая коллекция описана в официальном KB по адресу https://kb.altiris.com/display/1/kb/article.asp?aid=53318
Ниже пример SQL запроса из KB
select * from vComputer r
where GUID not IN
(select ai._ResourceGuid from vComputer i
join Inv_AeX_OS_Add_Remove_Programs ai on ai._ResourceGuid = i.Guid
WHERE ai.Name = 'Microsoft Office Word Viewer 2003')
and r.ismanaged=1
WHERE ai.Name = 'Microsoft Office Word Viewer 2003' с легкостью заменяется на конструкцию вида
WHERE ai.Name like 'Microsoft Office%'
Одно из преимуществ Altiris - есть возможность делать исключения из коллекций компьютеров других коллекций.
Учитывая описанную выше схему можно создавать группы исключений для установки определенного ПО.
среда, 23 июня 2010 г.
Определение порта Cisco к которому подключен компьютер
Некоторое время назад возникла задача определять порт роутера Cisco к которому подключен компьютер.
В качестве вводных данных были сведения что на роутерах включен CDP.
CDP - это Cisco Discovery Protocol, некий протокол, по которому с некоторой периодичностью ведется broadcast с идентификационными данными порта роутера Cisco.
Довольно длительный поиск программ которые могли бы работать с этим протоколом и при этом работали бы в консольном режиме привел к программе Cisco Discovery Protocol Reporter Version 1.0.7, сокращенно CDPR.exe.
Эта программа обладает почти всеми требуемыми характеристиками, за исключением нескольких ньюансов.
Ньюанс 1 - при запуске программа требует указать ей сетевой адаптер через который она будет слушать. Выглядит это как:
1. \Device\NPF_GenericDialupAdapter (Adapter for generic dialup and VPN capture)
2. \Device\NPF_{CA318676-6027-4305-8A6F-4633BC2412EB} (Marvell Yukon Ethernet Controller.)
Enter the interface number (1-2):
В качестве вводных данных были сведения что на роутерах включен CDP.
CDP - это Cisco Discovery Protocol, некий протокол, по которому с некоторой периодичностью ведется broadcast с идентификационными данными порта роутера Cisco.
Довольно длительный поиск программ которые могли бы работать с этим протоколом и при этом работали бы в консольном режиме привел к программе Cisco Discovery Protocol Reporter Version 1.0.7, сокращенно CDPR.exe.
Эта программа обладает почти всеми требуемыми характеристиками, за исключением нескольких ньюансов.
Ньюанс 1 - при запуске программа требует указать ей сетевой адаптер через который она будет слушать. Выглядит это как:
cdpr - Cisco Discovery Protocol Reporter Version 1.0.7
Copyright (c) 2002 - MonkeyMental.com1. \Device\NPF_GenericDialupAdapter (Adapter for generic dialup and VPN capture)
2. \Device\NPF_{CA318676-6027-4305-8A6F-4633BC2412EB} (Marvell Yukon Ethernet Controller.)
Enter the interface number (1-2):
Поскольку у нас задача автоматизировать этот процесс возник вопрос как это обойти.
Ньюанс 2 - при запуске она требует наличия ряда библиотек. Если она их видит в конечном итоге ругается на не установленный WinPCAP. Поскольку он не имеет silent-режима установки пришлось придумать способ обойти и это.
Для начала разберемся с пунктом 1.
Программа изначально была написана для Linux, что позволило предположить наличие ключа -h со справкой. Выяснилось что существует ключ -d для указания сетевого адаптера. К сожалению он принимает в качестве параметра исключительно ID сетевого устройства. Узнать его можно из ветки реестра SYSTEM\CurrentControlSet\Control\Network . Нам требуется раздел с параметром Class = Net. Подраздел и будет содержает требуемый для нас DeviceID. В нашем случае это получается
Программа изначально была написана для Linux, что позволило предположить наличие ключа -h со справкой. Выяснилось что существует ключ -d для указания сетевого адаптера. К сожалению он принимает в качестве параметра исключительно ID сетевого устройства. Узнать его можно из ветки реестра SYSTEM\CurrentControlSet\Control\Network . Нам требуется раздел с параметром Class = Net. Подраздел и будет содержает требуемый для нас DeviceID. В нашем случае это получается
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{CA318676-6027-4305-8A6F-4633BC2412EB}
Остается только добавить NPF_ и можно отправлять полученное значение программе CDPR.exe с ключем -d.
По ссылке находится скрипт написанный на Powershell для автоматизации процедуры получения DeviceID и запуска CDPR.exe .
Полученные от программы данные в виде
Device ID
value:
Addresses
value:
Port ID
value:
Записываются в реестр в ветку hklm\SOFTWARE\Company\Network\ и могут быть оттуда проинвентаризированы. Также можно сразу формировать файлы .mof или .xml для SCCM и Altiris соответственно, доделав соответствующим образом скрипт.
По поводу пункта 2.
Выяснилось что для полноценного запуска программы требуется три библиотеки - Packet.dll, WanPacket.dll и wpcap.dll. Эти файлы можно просто положить рядом с программой. Также для запуска требуется наличие файла npf.sys. К сожалению этот файл требуется скопировать в папку Drivers, иначе не срабатывает.
Скрипт проверяет наличие npf.sys в папке System32/Drivers и, если не находит его, копирует из папки где располагается сам.
В теории это выглядит так - пакет содержит все указанные файлы. У пакета программа имеет строку запуска powershell -executionpolicy unrestricted .\get_adapter.ps1
-executionpolicy требуется на всякий случай, если не отработала ранее команда powershell -command set-executionpolicy unrestricted или скрипт не подписан.
Весь комплект файлов расположен по ссылке. Скрипт расположен отдельно по ссылке выше.
По ссылке находится скрипт написанный на Powershell для автоматизации процедуры получения DeviceID и запуска CDPR.exe .
Полученные от программы данные в виде
Device ID
value:
Addresses
value:
Port ID
value:
Записываются в реестр в ветку hklm\SOFTWARE\Company\Network\ и могут быть оттуда проинвентаризированы. Также можно сразу формировать файлы .mof или .xml для SCCM и Altiris соответственно, доделав соответствующим образом скрипт.
По поводу пункта 2.
Выяснилось что для полноценного запуска программы требуется три библиотеки - Packet.dll, WanPacket.dll и wpcap.dll. Эти файлы можно просто положить рядом с программой. Также для запуска требуется наличие файла npf.sys. К сожалению этот файл требуется скопировать в папку Drivers, иначе не срабатывает.
Скрипт проверяет наличие npf.sys в папке System32/Drivers и, если не находит его, копирует из папки где располагается сам.
В теории это выглядит так - пакет содержит все указанные файлы. У пакета программа имеет строку запуска powershell -executionpolicy unrestricted .\get_adapter.ps1
-executionpolicy требуется на всякий случай, если не отработала ранее команда powershell -command set-executionpolicy unrestricted или скрипт не подписан.
Весь комплект файлов расположен по ссылке. Скрипт расположен отдельно по ссылке выше.
Java AU/Flash AU
Сегодня мы попробуем отключить в пределах всего домена автообновление SUN JRE и Adobe Flash 10.
Для первого пунка нам потребуется внедрить следующий код в реестр всех компьютеров:
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Update\Policy]
"EnableJavaUpdate"=dword:00000000
"EnableAutoUpdateCheck"=dword:00000000
Второй пункт немного сложнее.
Процедура описана в статье Adobe.KB http://kb2.adobe.com/cps/167/16701594.html
Мы создадим два пакета и две задачи для достижения наших целей.
Пакет 1.
Package Source : "Package does not contain source files"
Programs:
Program 1:
Command Line: reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v SunJavaUpdateSched /f
Эта команда удалит jushed из автозагрузки.
Program 2:
Command Line: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Update\Policy" /v EnableJavaUpdate /t REG_DWORD /d 0 /f
Program 3:
Command Line: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Update\Policy" /v EnableAutoUpdateCheck /t REG_DWORD /d 0 /f
Пакет 2.
Пакет 2 будет содержать один файл - mms.cfg с всего одной строкой "AutoUpdateDisable=1"
Programs:
Command Line: xcopy /y mms.cfg %systemroot%\system32\Macromed\Flash
Задача 1 будет типа Sequential, задача 2 - стандартной.
Вуаля.
UPD:
После некоторого совещания было решено сделать первичную процедуру через TaskManagement и далее просто модифицировать пакеты для инсталляции соответствующего софта.
UPD:
После некоторого совещания было решено сделать первичную процедуру через TaskManagement и далее просто модифицировать пакеты для инсталляции соответствующего софта.
Altiris, что это такое и с чем его едят
Попытка номер -дцать создать блог посвяшенной чему нибудь интересному или полезному. На этот раз попробую писать про систему Symantec Altiris.
Altiris - это аналог MS SCCM (Microsoft System Center Configuration Manager), ранее называвшийся SMS.
Обе системы позволяют (если кратко) устанавливать и инвентаризировать Software, собирать конфигурации Hardware, etc. В теории эта система должна покрывать все потребности системного администратора управляющего парком компьютеров числом более 200.
SCCM предоставляет MMC-консоль, Altiris работает исключительно через web-интерфейс.
Подписаться на:
Сообщения (Atom)