【问题标题】:How can I set an app pool restart schedule in IIS7 via WMI / Powershell?如何通过 WMI / Powershell 在 IIS7 中设置应用程序池重启计划?
【发布时间】:2012-01-10 21:08:31
【问题描述】:

我正在创建一个函数来将 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() 时,这个值似乎没有保存。下一步是什么?

【问题讨论】:

    标签: iis-7 wmi


    【解决方案1】:

    我已经放弃了,决定用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 的情况下完成此操作。

    【讨论】:

      【解决方案2】:

      似乎是很久以前的帖子了......但是我在2016年也遇到了问题,所以在这里发帖似乎不是一件坏事。

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

      这里是它如何为我工作的 sn-p(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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-24
        • 2011-11-04
        • 2016-04-24
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        相关资源
        最近更新 更多