使用参数设置WebConfigurationProperty

时间:2018-04-18 08:43:05

标签: powershell iis web-config

如果我运行以下脚本;在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部分创建的,但之后我无法对其进行编辑。

在参数化的属性中是否存在一些可能会破坏这一点的内容?

1 个答案:

答案 0 :(得分:0)

我为有兴趣的人解决了这个问题。

看起来Set-WebConfigurationPropertyAdd-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 (.*); 

这可以按预期工作。