如何通过WMI / Powershell在IIS7中设置应用程序池重启计划?

时间:2012-01-10 21:08:31

标签: iis-7 wmi

我正在创建一个函数来管理IIS7中的App Pools到我们想要的规范,并且我无法从等效的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 :(得分:0)

我已经放弃并决定使用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,我仍然有兴趣了解如何做到这一点。

答案 1 :(得分:0)

很久以前似乎是一个帖子......但是2016年我也有问题,所以在这里张贴似乎并不是件坏事。

我正在通过Pascal Script完成工作,我正在使用不同的对象/属性。我遇到的一个主要问题是我的时间字符串不是ansi。

以下是它如何为我工作的片段(varAppPool是我的app pool对象):

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;