激活IIS站点日志记录字段[PowerShell]

时间:2016-04-11 14:58:48

标签: windows powershell iis logging automation

有没有办法在IIS中的特定网站上激活日志记录字段,最好是通过PowerShell?

我想激活客户端IP地址'记录字段,无需RDP到机器并手动设置。

我正在使用IIS 8.5运行Windows Server 2012

enter image description here

2 个答案:

答案 0 :(得分:1)

您还可以使用以下方法设置标记,根据下面的列表,您可以使用所需标记的总值。

将值设置为2到标志号的功率。总计您想要打开的所有标志,并获得可以将logExtFileFlags设置为的值。

<flag number= "0" flag name="Date" value="1" /> 
<flag number= "1" flag name="Time" value="2" /> 
<flag number= "2" flag name="ClientIP" value="4" /> 
<flag number= "3" flag name="UserName" value="8" /> 
<flag number= "4" flag name="SiteName" value="16" /> 
<flag number= "5" flag name="ComputerName" value="32" /> 
<flag number= "6" flag name="ServerIP" value="64" /> 
<flag number= "7" flag name="Method" value="128" /> 
<flag number= "8" flag name="UriStem" value="256" /> 
<flag number= "9" flag name="UriQuery" value="512" /> 
<flag number= "10" flag name="HttpStatus" value="1024" /> 
<flag number= "11" flag name="Win32Status" value="2048" /> 
<flag number= "12" flag name="BytesSent" value="4096" /> 
<flag number= "13" flag name="BytesRecv" value="8192" /> 
<flag number= "14" flag name="TimeTaken" value="16384" /> 
<flag number= "15" flag name="ServerPort" value="32768" /> 
<flag number= "16" flag name="UserAgent" value="65536" /> 
<flag number= "17" flag name="Cookie" value="131072" /> 
<flag number= "18" flag name="Referer" value="262144" /> 
<flag number= "19" flag name="ProtocolVersion" value="524288" /> 
<flag number= "20" flag name="Host" value="1048576" /> 
<flag number= "21" flag name="HttpSubStatus" value="2097152" /> 

E.G。 我们希望打开UserName,ServerIP,ServerPort和Host。 这要求我们添加8 + 64 + 32768 + 1048576 = 1081416

因此命令是:

Set-ItemProperty "IIS:\Sites\$siteName" -name LogFile.logExtFileFlags -value 1081416

答案 1 :(得分:0)

经过一番搜索后,我找到了自己解决方案的基线: Set IIS Log Fields via PowerShell

Activate-LoggingField函数将网站名称和日志记录字段名称作为参数

它通过Get - WebConfigurationProperty cmdlet获取提供的网站的活动日志记录字段,并检查提供的日志记录字段是否存在。如果它不存在,它将尝试通过Set-WebConfigurationProperty cmdlet

添加它
Import-Module Webadministration

Function Activate-LoggingField
{
    param([Parameter(Mandatory=$true)][string]$websiteName,
          [Parameter(Mandatory=$true)][string]$loggingField)

    $loggingFilter = "/system.applicationHost/sites/site[@name=`"$websiteName`"]/LogFile"
    $currentLoggingFields = Get-WebConfigurationProperty -Filter $loggingFilter -Name LogExtFileFlags
    if ($currentLoggingFields -notmatch $loggingField)
    {
        $newLoggingFields = "$currentLoggingFields,$loggingField"
        Set-WebConfigurationProperty -Filter $loggingFilter -Name LogExtFileFlags -Value $newLoggingFields
    }
}

Activate-LoggingField -websiteName "MySite" -loggingField "ClientIP"