使用IISAdministraton PowerShell模块获取IIS applicationHost.config LogFile设置

问题描述 投票:0回答:1

我一直试图通过获取和修改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"]
powershell iis windows-server-2012-r2
1个回答
0
投票

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命名空间即可。

© www.soinside.com 2019 - 2024. All rights reserved.