Вы когда -нибудь получали задачу и думаете, насколько это трудно? Тогда вы начинаете то, что превращается в, казалось бы, бесконечное путешествие.
Добро пожаловать в смешивание старых и новых технологий.
Я оказался в состоянии, когда мне нужно установить клиент Oracle на виртуальную машину Windows, работающую в Azure, используя желаемую конфигурацию состояния (a.k.a. DSC), и, ну, давайте просто скажем, что это было интересное путешествие.
Перечислен непосредственно после этого фрагмента DSC, который я публикую здесь в надежде, что другие, у которых есть подобная потребность, могут наткнуться на это и спасти себя от головной боли.
Я предоставлю разрыв основных произведений. Я намеренно оставил кусочки журнала в сценарии, чтобы любой, кто был настолько смелым, чтобы разрезать и вставить, не читая, по крайней мере, в журнале, чтобы копаться.
Несколько важных предпосылок для использования этого сценария.
Вам понадобится модуль DSC, который загружает клиентский пакет Oracle, тот, который я использовал, был для 11GR2 и включает в себя файл ответов для клиента.
- Эти предметы будут специфичными для вашей ситуации.
Ваш локальный диспетчер конфигурации (a.k.a. LCM) должен быть установлен для того, чтобы DSC перезагрузился.
Этот скрипт отключит UAC, и если по какой -то странной причине после перезагрузки, сценарий не продолжил запуск UAC, остается в состоянии инвалида …
!! ПРЕДУПРЕЖДЕНИЕ !! UAC не следует оставлять отключенным
Убедитесь, что вы понимаете, что делает этот сценарий и как диагностировать состояние виртуальной машины, как только сценарий запускается.
Script insalloraclewithanswerfile {
TestScript = {
$ oraclepathtest-path hklm: \ software \ wow6432node \ oracle \ key_oraclient11g_home1;
$ regval -itemproperty -path hklm: \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -name EnableLua;
if (($ oraclepathtest) -и ($ Regval. EnableLua -eq 1)) {
вернуть $ true
}
еще {
вернуть $ false
}
}
SetScript = {
$ continueProcessing = $ true;
$ logtimestamp -date -format yymmddhhmm;
$ logpath;
$ logfile;
Add-Content -path $ logfile -value «-начинаться в общей сложности Oracle Install с ответом-«;
Add -Content -path $ logfile -value » -открытие -получить текущее значение UAC -«;
$ regval -itemproperty -path hklm: \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -name EnableLua;
Add -Content -path $ logfile -value «UAC Reg Key:»;
Add -Content -path $ logfile -value $ regval;
if ($ regval. EnableLua -eq «1») {
Add-Content -path $ logfile -value «-изменить UAC на отключение (т.е. 0)-«;
Set -itemproperty -path hklm: \ software \ microsoft \ windows \ currentversion \ policies \ system -name EnableLua -value 0;
Add-content -path $ file -value «-установите глобальный флаг, чтобы вызвать перезагрузку-«;
$ global: dscmachinestatus;
$ continueProcessing = $ false;
}
if ($ continueProcessing) {
Add-Content -path $ logfile -value «-начать проверку на Oracle Install-«;
$ oraclereGpath;
Add -Content -path $ logfile -value «Oracle Reg Path:»;
Add -Content -path $ logfile -value $ oraclereGpath;
$ oraclepathtest-path $ oracleregpath;
Add -Content -path $ logfile -value «Результаты испытательного пути»;
Add -Content -path $ logfile -value $ oraclepathtest;
if ($ oraclepathtest -eq $ false) {
$ params;
$ oracleclientexe;
Add-Content -path $ logfile -value «— Запуск Oracle Install —«;
Start -process -filepath $ oracleclientexe -argumentlist $ params -wait -passthru;
Add-Content -path $ logfile -value «— Отделка Oracle Install —«;
}
еще {
Add -Content -path $ logfile -value «Oracle Reg Key был найден, чтобы не работать установки».
}
Add -Content -path $ logfile -value » -вторичный -получить текущее значение UAC -«;
$ regval -itemproperty -path hklm: \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -name EnableLua;
Add -Content -path $ logfile -value «UAC Reg Key:»;
Add -Content -path $ logfile -value $ regval;
if ($ regval. EnableLua -eq «0») {
Add-Content -path $ logfile -value «-измените UAC на включение (т.е. 1)-«;
SET -ITEMPORPORTY -PATH реестр:: hkey_local_machine \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -name -name EnableLua -value 1;
}
Add-content -path $ file -value «-установите глобальный флаг, чтобы вызвать перезагрузку-«;
$ global: dscmachinestatus;
}
Add-Content -path $ logfile -value «-Завершите общую oracle install с ответом-«
}
GetScript =}}
Зависит от
}
Тестовый скрипт
Короче говоря, тестовый скрипт подтверждает две вещи.
- Установлен ли клиент Oracle на основе ожидаемого ключа реестра присутствует.
- Является ли UAC в включенном состоянии, также проверяется путем рассмотрения ожидаемого значения ключа реестра.
Если какое -либо из этих условий является ложным, необходимо запустить сценарий SET.
Установить скрипт
Вот где он получает волосатый интересно.
Я пропущу комментировать журнал, так как должно быть ясно, что делают журналы, интересный момент о том, как ведется журнал Дата времени на дату как имя, которое я нашел под рукой, так как я несколько раз посадил себя в бесконечный цикл.
Поскольку мне придется по сути предоставить себе автоматический выключатель, я установил Flug Flag в начале, который я могу использовать позже.
Из -за того, как работает установщик Oracle, даже с файлом ответов, вы все равно получите подсказку UAC, прежде чем вы сможете начать установку, поэтому первая часть этого сценария набора получит значение UAC через реестр.
Как только у меня есть значение UAC, я проверяю, чтобы увидеть состояние значения, в случае, когда оно происходит (т.е. 1) я хочу отключить его Поэтому я изменяю значение реестра, также устанавливаю свой Flag Flag на False и устанавливаю переменную среды, чтобы DSC для перезагрузки после завершения этого скрипта. А именно …;
На этом этапе я проверяю свой флаг, чтобы убедиться, что я пропустил попытку установить клиент Oracle Это связано с тем, что даже думал, что мы обновили реестр, который он вступает в силу, пока мы не перезагрузимся, и, следовательно, не нужно запускать установщик Oracle.
Поэтому мы входим в систему, что мы не можем установить клиент Oracle и продолжать.
Следующий бит также приводит к не применению изменений, поскольку значение UAC в реестре технически все еще 1, поскольку UAC фактически не сохраняется до перезагрузки.
Я неаккуратно в конце и сбрасываю dscmachinestatus. Мех.
Итак, теперь мы перезагружаемся.
Теперь пробегая скрипт во второй раз после перезагрузки, мы останемся в состоянии, где UAC отключен Но у нас не установлено Oracle Client, поэтому, когда мы запускаем сценарий SET, произойдет установка Oracle.
Мы завершаем второй запуск за счет включенного UAC и еще одной перезагрузки.
Когда система появляется в третий раз UAC включен и установлен клиент Oracle.
Пожалуйста, дайте мне знать, если вы столкнетесь с проблемами с этим сценарием в комментариях.
Оригинал: «https://dev.to/briannipper/creating-a-dsc-module-to-install-oracle-client-and-disable-enable-uac-3358»