我正在创建一个函数来管理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[]
数组以分配此值?
$time = ([wmiclass]'root\WebAdministration:ScheduleElement').CreateInstance()
$time.Value = '00000000061500.000000:000'
$newPool.Recycling.PeriodicRestart.Schedule = $time;
问题2:当我拨打$newPool.Put()
时,此值似乎无法保存。下一步是什么?
答案 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;