Как установить расписание перезапуска пула приложений в IIS7 через WMI / Powershell? - PullRequest
0 голосов
/ 11 января 2012

Я создаю функцию для управления пулами приложений в IIS7 в соответствии с нашими желаемыми спецификациями, и у меня возникают проблемы с преобразованием одной строки из нашего эквивалентного сценария IIS6;установить график перезапуска.

В IIS6 строка была:

$newPool.PeriodicRestartSchedule = @( '6:15' );

Наивный перевод для IIS7:

$newPool.Recycling.PeriodicRestart.Schedule = @('00000000061500.000000:000')

, однако это не работает, поскольку выдает исключение:

Exception setting "Schedule": "Unable to cast object of type 'System.String' 
to type 'System.Management.ManagementBaseObject'.

Как создать этот массив ScheduleElement[] для присвоения этому значению?

Редактировать: проблема 1 вниз ...:

$time = ([wmiclass]'root\WebAdministration:ScheduleElement').CreateInstance()
$time.Value = '00000000061500.000000:000'
$newPool.Recycling.PeriodicRestart.Schedule = $time;

Проблема 2:Это значение не сохраняется, когда я звоню $newPool.Put().Что дальше?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2016

Кажется, это было сообщение давным-давно ... Но у меня тоже были проблемы до 2016 года, поэтому публикация здесь не кажется плохой вещью.

Я делаю эту работу через Pascal Script и использую разные объекты / свойства. Одна из главных проблем, с которыми я столкнулся, заключалась в том, что моя временная цепочка не была анси.

Вот фрагмент того, как это работает для меня (varAppPool - мой объект пула приложений):

WMI_IIS_ApplicationPool_SetSetting_Recycling(varAppPool, '00000000000000.000000:000', '00000000000000.000000:000');

function WMI_IIS_ApplicationPool_SetSetting_Recycling(varAppPool : Variant; strIdleTimeout, strPeriodicRestart: String):Boolean;
begin
  Result := False;
  if (WMI_IIS_Internal_CheckVariantIsNull(varAppPool, 'WMI_IIS_ApplicationPool_SetSetting_Recycling: {#WMI_IIS_errApplicationPoolIsNull}')) then
  begin
    varAppPool.ProcessModel.IdleTimeout := WMI_IIS_Internal_ConvertToAnsi(strIdleTimeout);
    varAppPool.Recycling.PeriodicRestart.Time := WMI_IIS_Internal_ConvertToAnsi(strPeriodicRestart);
    try
      varAppPool.put_();
      Result := True;
    except
      Log('WMI_IIS_ApplicationPool_SetSetting_Recycling: Saving properties failed');
    end;
  end;
end;
0 голосов
/ 23 февраля 2012

Я сдался и решил использовать appcmd:

function CreateAppPool( [parameter(ValueFromPipelineByPropertyName=$true)][string]$AppPoolName ) {
    PROCESS {
        $appcmd = 'C:\Windows\SysWOW64\inetsrv\appcmd.exe'
        &$appcmd add appPool "/name:$AppPoolName" "/+recycling.periodicRestart.schedule.[value='06:15:00']"
    }
}

Мне все еще интересно посмотреть, как это можно сделать без appcmd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...