我一直试图通过获取和修改IISAdministration module文件中的基本设置来自学applicationHost.config
。我正在努力了解如何使用WebAdministration module执行与以下示例等效的IISAdministration。我目前仍在阅读有关IIS配置如何工作的this great article,我只是没有得到它。
使用Web管理示例:
#Gets the Log File format set in the applicationHost.config file
Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.applicationHost/sites/siteDefaults/logFile" -Name "logFormat"
这是我使用IISAdministraton命令提出的,但我得到一个“警告:Config集合元素不存在”。我试图设置的设置确实存在,所以我一定做错了。任何指导或解释将不胜感激
$section = Get-IISConfigSection -SectionPath "system.applicationHost/sites"
Get-IISConfigCollection $section | Get-IISConfigCollectionElement -ConfigAttribute @{"Name"="logFormat"}
更新:
我找到了一种使用IISAdministration访问logFormat属性的方法。我真诚地希望这不是在配置文件中访问嵌套属性的自然方式,而我偶然会遇到多种方法之一,以实现我在此模块中的目标。我还在玩这些命令并阅读有关它们的更多内容。
Get-IISConfigSection -SectionPath "system.applicationHost/sites" | Get-IISConfigElement -ChildElementName "siteDefaults" | Get-IISConfigElement -ChildElementName "logFile" | Get-IISConfigAttributeValue -AttributeName "logFormat"
更新:
我发现使用IISAdministration访问logFormat属性的另一种方法,但我仍然不太满意。
$manager = Get-IISServerManager
$config = $manager.GetApplicationHostConfiguration()
$section = $config.GetSection("system.applicationHost/sites")
$siteDefaults = $section.GetChildElement("siteDefaults")
$siteDefaults.GetChildElement("logFile")["logFormat"]
HiTech /我再次看完之后删除了我之前的回答。
正如你所发现的那样。您无法像使用WebAdmin一样使用IISAdmin直接访问该元素。
您已导航,直到您将其作为属性或值公开。这实际上是例1中的detailed in the cmdlet help of Get-IISConfigElement。
修改为显示每个部分的输出并获取日志文件格式。
# Gets the Log File format set in the applicationHost.config file
Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.applicationHost/sites/siteDefaults/logFile" -Name "logFormat"
# W3C
# Attempt at using IISADministration to get the same information
($ConfigSection = Get-IISConfigSection -SectionPath "system.applicationHost/sites")
<#
...
ChildElements : {siteDefaults, applicationDefaults, virtualDirectoryDefaults}
ElementTagName : system.applicationHost/sites
...
#>
($SitesCollection = Get-IISConfigCollection -ConfigElement $ConfigSection)
<#
Attributes : {name, id, serverAutoStart, state}
ChildElements : {bindings, limits, logFile, traceFailedRequestsLogging...}
...
RawAttributes : {[name, Default Web Site], [id, 1], [serverAutoStart, True], [state, 1]}
...
#>
($Site = Get-IISConfigCollectionElement -ConfigCollection $SitesCollection -ConfigAttribute @{"name" = "Default Web Site"})
<#
Attributes : {name, id, serverAutoStart, state}
ChildElements : {bindings, limits, logFile, traceFailedRequestsLogging...}
...}
RawAttributes : {[name, Default Web Site], [id, 1], [serverAutoStart, True], [state, 1]}
...
#>
($Elem = Get-IISConfigElement -ConfigElement $Site -ChildElementName "logfile")
<#
Attributes : {logExtFileFlags, customLogPluginClsid, logFormat, logTargetW3C...}
ChildElements : {customFields}
ElementTagName : logFile
...
RawAttributes : {[logExtFileFlags, 2478031], [customLogPluginClsid, ], [logFormat, 2], [logTargetW3C, 1]...}
...
#>
($LogDetails = Get-IISConfigAttributeValue -ConfigElement $Elem -AttributeName "logformat")
# W3C
所以你最终得到这个,没有像WebAdmin构造那样简洁......
Get-IISConfigSection -SectionPath "system.applicationHost/sites" |
%{Get-IISConfigCollection -ConfigElement $PSItem} |
%{Get-IISConfigCollectionElement -ConfigCollection $PSItem -ConfigAttribute @{"name" = "Default Web Site"}} |
%{Get-IISConfigElement -ConfigElement $PSItem -ChildElementName "logfile"} |
%{Get-IISConfigAttributeValue -ConfigElement $PSItem -AttributeName "logformat"}
# Results
W3C
是的,如果没有循环,上面不会给出目标结果。
你的第一次更新,虽然你对它不满意,但迄今为止最简洁。即使我们都试过了。这些配置只是XML文件,因此只需使用XML cmdlet或.Net XML命名空间即可。