Получение параметров IIS applicationHost.config LogFile с помощью модуля PowerShell IISAdministraton - PullRequest
0 голосов
/ 09 марта 2019

Я пытался научить себя модулю IISAdministration , получая и изменяя основные настройки в файле applicationHost.config.Я изо всех сил пытаюсь понять, как сделать IISAdministration эквивалент моего примера ниже, используя модуль WebAdministration .Я до сих пор читаю эту замечательную статью о том, как работает конфигурация IIS, и я просто не понимаю.

Рабочий пример WebAdministration:

#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"}

ОБНОВЛЕНИЕ:

Я нашел один способ доступа к атрибуту logFormat с помощью IISAdministration.Я искренне надеюсь, что это не естественный способ доступа к вложенным атрибутам в конфигурационных файлах, и я случайно наткнулся на один из многих способов достижения своей цели в этом модуле.Я все еще играю с командами и читаю о них, так что буду дальше.

Get-IISConfigSection -SectionPath "system.applicationHost/sites" | Get-IISConfigElement -ChildElementName "siteDefaults" | Get-IISConfigElement -ChildElementName "logFile" | Get-IISConfigAttributeValue -AttributeName "logFormat"

ОБНОВЛЕНИЕ:

Другой способ найти доступ к атрибуту logFormat с помощью IISAdministrationно я все еще не совсем доволен.

$manager = Get-IISServerManager
$config = $manager.GetApplicationHostConfiguration()
$section = $config.GetSection("system.applicationHost/sites")
$siteDefaults = $section.GetChildElement("siteDefaults")
$siteDefaults.GetChildElement("logFile")["logFormat"]

1 Ответ

0 голосов
/ 10 марта 2019

HiTech / Я удалил свой предыдущий ответ, посмотрев на это снова.

Как вы обнаружили. Вы не можете напрямую получить доступ к элементу с помощью IISAdmin, как с WebAdmin.

Вы должны перемещаться до тех пор, пока то, что вам нужно, не будет представлено как атрибут или значение. На самом деле это подробно описано в справке по командлетам Get-IISConfigElement в примере 1.

Модифицировано, чтобы показать выходные данные для каждого раздела и получить формат файла журнала.

# 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 или пространство имен .Net XML, чтобы добраться до вещей.

...