如果我运行以下脚本;在MySite上创建一个名为RuleName的规则,并为其设置匹配URL规则:
$PSPath = 'IIS:\Sites\MySite'
Add-WebConfigurationProperty -PSPath $PSPath -filter "system.webServer/rewrite/rules" -name '.' -value @{name='RuleName'; patterSyntax='Regular Expressions'; stopProcessing='True'};
Set-WebConfigurationProperty -PSPath $PSPath -filter "system.webServer/rewrite/rules/rule[@name='RuleName']/match" -name 'url' -value '(.*)';
如果我要使用参数化的规则名称或整个-filter
作为参数运行此脚本,我会收到以下错误:
警告:在路径'MACHINE / WEBROOT / APPHOST / MySite'中找不到目标配置对象'system.webServer / rewrite / rules / rule [@ name ='RuleName'] / match。
规则是在Add-WebConfigurationProperty
部分创建的,但之后我无法对其进行编辑。
在参数化的属性中是否存在一些可能会破坏这一点的内容?
答案 0 :(得分:0)
我为有兴趣的人解决了这个问题。
看起来Set-WebConfigurationProperty
和Add-WebConfigurationProperty
处理规则名称的方式不同。对于添加,名称' RuleName'将创建一个名为"' RuleName'"然后在编辑规则' RuleName' (参数化),正在搜索' RuleName'没有引号而没有找到它。我通过如下两个参数解决了这个问题:
$RuleName1 = 'RuleName'
$RuleName2 = "'RuleName'"
$PSPath = 'IIS:\Sites\' + $SitePath
Add-WebConfigurationProperty -PSPath $PSPath -filter "system.webServer/rewrite/rules" -name '.' -value @{name=$RuleName1; patterSyntax='Regular Expressions'; stopProcessing='True'};
Set-WebConfigurationProperty -PSPath $PSPath -filter "system.webServer/rewrite/rules/rule[@name=$RuleName2]/match" -name 'url' -value (.*);
这可以按预期工作。