Octopus.Script exported 2017-12-22 by arnodenuijl belongs to ‘IIS’ category.
Sets fields included in IIS logging. Uses named checkboxes where the names are identical to the naming scheme in IIS Manager.
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
SiteName
SiteName
null
Where should the logs be placed?
iisLogDirectory
Date (date)
Date = True
Time (time)
Time = True
ClientIP IP Address (c-ip)
ClientIP = True
User Name (cs-username)
UserName = True
Service Name (s-sitename)
ServiceName = False
ServerName (s-computername)
ComputerName = False
null
Server IP Address (s-ip)
ServerIP = False
Method (cs-method)
Method = True
UriStem (cs-uri-stem)
UriStem = True
null
Uri query (cs-uri-query)
UriQuery = True
null
Protocol Status (sc-status)
HttpStatus = True
Win32 Status (sc-win32-status)
Win32Status = False
null
Protocol Substatus (sc-substatus)
HttpSubStatus = True
Bytes sent (sc-bytes)
BytesSent = False
Bytes received (cs-bytes)
BytesRecv = False
null
Time taken (time-taken)
TimeTaken = True
Protocol version (cs-version)
ProtocolVersion = True
null
Host (cs-host)
Host = True
User agent (cs(UserAgent))
UserAgent = true
null
Cookie (cs(Cookie))
Cookie = False
Referer (cs(Referer))
Referer = False
null
Server Port (s-port)
ServerPort = True
Original IP
OriginalIP = True
From X-FORWARDED-FOR in request.
Script body
Steps based on this template will execute the following PowerShell script.
Import-Module "WebAdministration" -ErrorAction Stop
function SetIisLogPath {
param($logPath, $IISsitename)
write-host "#Updating IIS Log path"
if (!(Test-Path "IIS:\Sites\$($IISsitename)")) {
write-host "$IISsitename does not exist in IIS"
} else {
Set-ItemProperty IIS:\Sites\$($IISsitename) -name logFile.directory -value $logPath
write-host "IIS LogPath updated to $logPath"
}
}
function AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun
{
param([string] $site)
#Clear existing log definition if it exists. We use site name to make it apparent where it belongs.
clear-WebConfiguration -PSPath IIS:\ -Filter "system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='$site']"
#Get current powershell execution folder
$currentLocation = Get-Location
#Create an empty bat which will be populated with appcmd instructions
$stream = [System.IO.StreamWriter] "$currentLocation\$site.bat"
$stream.WriteLine("%systemroot%\system32\inetsrv\appcmd.exe clear config ""$site"" -section:system.webServer/advancedLogging/server /commit:apphost")
#Create site specific log definition
$stream.WriteLine("%systemroot%\system32\inetsrv\appcmd.exe set config ""$site"" -section:system.webServer/advancedLogging/server /+`"logDefinitions.[baseFileName='$site',enabled='True',logRollOption='Schedule',schedule='Daily',publishLogEvent='False']`" /commit:apphost")
#Get all available fields for logging
$availableFields = Get-WebConfiguration "system.webServer/advancedLogging/server/fields"
$targetFields = ((GetIisLogFields).iisHeader)
Write-Host "Target fields: " (($targetFields) -join ',')
#Add appcmd instruction to add all the selected fields above to be logged as part of the logging
#The below section can be extended to filter out any unwanted fields
foreach ($field in $targetFields) {
$f = (($availableFields.Collection) |Where-Object {$_.logHeaderName -eq "$field"})
Write-Host "Appending " $f.iisHeader $f.id
$stream.WriteLine("C:\windows\system32\inetsrv\appcmd.exe set config ""$site"" -section:system.webServer/advancedLogging/server /+`"logDefinitions.[baseFileName='$site'].selectedFields.[id='$($f.id)',logHeaderName='$($f.logHeaderName)']`" /commit:apphost")
}
$stream.close()
# execute the batch file create to configure the site specific Advanced Logging
Start-Process -FilePath $currentLocation\$site.bat
Start-Sleep -Seconds 10
}
function GetIisLogFields {
$IisLogFields = @()
if ($OctopusParameters['Date'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "Date"; iisHeader = "date" } }
if ($OctopusParameters['Time'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "Time"; iisHeader = "time" } }
if ($OctopusParameters['ClientIP'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "ClientIP"; iisHeader = "c-ip"} }
if ($OctopusParameters['UserName'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "UserName"; iisHeader = "cs-username" } }
if ($OctopusParameters['SiteName'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "SiteName"; iisHeader = "s-sitename" } }
if ($OctopusParameters['ComputerName'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "ComputerName"; iisHeader = "s-computername" } }
if ($OctopusParameters['ServerIP'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "ServerIP"; iisHeader = "s-ip" } }
if ($OctopusParameters['ServerPort'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "ServerPort"; iisHeader = "s-port" } }
if ($OctopusParameters['Method'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "Method"; iisHeader = "cs-method" } }
if ($OctopusParameters['UriStem'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "UriStem"; iisHeader = "cs-uri-stem" } }
if ($OctopusParameters['UriQuery'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "UriQuery"; iisHeader = "cs-uri-query" } }
if ($OctopusParameters['HttpStatus'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "HttpStatus"; iisHeader = "sc-status" } }
if ($OctopusParameters['HttpSubStatus'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "HttpSubStatus"; iisHeader = "sc-substatus" } }
if ($OctopusParameters['Win32Status'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "Win32Status"; iisHeader = "sc-win32-status" } }
if ($OctopusParameters['BytesSent'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "BytesSent"; iisHeader = "sc-bytes" } }
if ($OctopusParameters['BytesRecv'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "BytesRecv"; iisHeader = "cs-bytes" } }
if ($OctopusParameters['TimeTaken'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "TimeTaken"; iisHeader = "TimeTakenMS" } }
if ($OctopusParameters['ProtocolVersion'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "ProtocolVersion"; iisHeader = "cs-version" } }
if ($OctopusParameters['Host'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "Host"; iisHeader = "cs(Host)" } }
if ($OctopusParameters['UserAgent'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "UserAgent"; iisHeader = "cs(User-Agent)" } }
if ($OctopusParameters['Cookie'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "Cookie"; iisHeader = "cs(Cookie)" } }
if ($OctopusParameters['Referer'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "Referer"; iisHeader = "cs(Referer)" } }
if ($OctopusParameters['OriginalIP'] -eq "True") { $IisLogFields += New-Object PSObject -Property @{id = "OriginalIP"; iisHeader = "x-forwarded-for" } }
return $IisLogFields
}
function SetForIISAboveV7 {
param($SiteName)
[System.Collections.ArrayList]$logFields = ((GetIisLogFields).id)
$filter = "/system.applicationHost/sites/site[@Name=""$SiteName""]/logFile"
write-host "Filter: $filter"
#Clear all existing custom fields...
clear-WebConfiguration -PSPath IIS:\ -Filter "$filter/customFields"
if ($logFields.Contains("OriginalIP")) {
add-WebConfiguration -PSPath IIS:\ -Filter "$filter/customFields" -Value @{logFieldName='OriginalIP';sourceType='RequestHeader';sourceName='X-FORWARDED-FOR'}
}
Write-Host (($logFields) -join ',')
# This is part of extended logging and cannot be set using the syntax below.
$logFields.Remove("OriginalIP")
Set-WebConfigurationProperty -Filter $filter -Value (($logFields) -join ',') -Name "LogExtFileFlags"
}
function SetForIISV7 {
param($site, $logDirectory)
Write-Host 'Disables http logging module'
Set-WebConfigurationProperty -Filter system.webServer/httpLogging -PSPath machine/webroot/apphost -Name dontlog -Value true
Write-Host 'Adding X-Forwarded-For as OriginalIP to advanced logging'
if (Get-WebConfigurationProperty "system.webServer/advancedLogging/server/fields" -Name Collection |Where-Object {$_.id -eq "OriginalID"}) {
write-host "OriginalID field already exists. Will not modify existing definition."
} else {
Add-WebConfiguration "system.webServer/advancedLogging/server/fields" -value @{id="OriginalID";sourceName="X-Forwarded-For";sourceType="RequestHeader";logHeaderName="X-Forwarded-For";category="Default";loggingDataType="TypeLPCSTR"}
}
# Disables the default advanced logging config
Set-WebConfigurationProperty -Filter "system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='%COMPUTERNAME%-Server']" -name enabled -value false
# Enable Advanced Logging
Set-WebConfigurationProperty -Filter system.webServer/advancedLogging/server -PSPath machine/webroot/apphost -Name enabled -Value true
# Set log directory at server level
Set-WebConfigurationProperty -Filter system.applicationHost/advancedLogging/serverLogs -PSPath machine/webroot/apphost -Name directory -Value $logDirectory
# Set log directory at site default level
Set-WebConfigurationProperty -Filter system.applicationHost/sites/siteDefaults/advancedLogging -PSPath machine/webroot/apphost -Name directory -Value $logDirectory
AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun $site
}
Write-Host "Value of UriQuery parameter " $OctopusParameters['UriQuery']
$logPath = $OctopusParameters['IISLogPath']
$IISsitename = $OctopusParameters['webSiteName']
$iisMajorVersion = (get-itemproperty HKLM:\SOFTWARE\Microsoft\InetStp\ |select MajorVersion).MajorVersion
if ($iisMajorVersion -gt 7) {
SetForIISAboveV7 $OctopusParameters['SiteName']
SetIisLogPath $OctopusParameters['iisLogDirectory'] $OctopusParameters['SiteName']
} elseif ($iisMajorVersion -lt 7) {
Write-Host 'Cannot handle IIS versions below 7. Found IIS version ' $iisMajorVersion
exit 1
} else {
SetForIISV7 $OctopusParameters['SiteName'] $OctopusParameters['iisLogDirectory']
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "e46aad55-5484-48a7-a90d-970d40129893",
"Name": "IIS Website - Set log format",
"Description": "Sets fields included in IIS logging. Uses named checkboxes where the names are identical to the naming scheme in IIS Manager.",
"Version": 14,
"ExportedAt": "2017-12-22T14:56:00.000Z",
"ActionType": "Octopus.Script",
"Author": "arnodenuijl",
"Parameters": [
{
"Id": "1a1520b9-58b1-44ae-b9df-991b34f6b62b",
"Name": "SiteName",
"Label": "SiteName",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "66d6d9d2-3cc0-47f3-bcd1-6b1d9f0846dc",
"Name": "iisLogDirectory",
"Label": "Where should the logs be placed?",
"HelpText": "",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "61656b11-a130-494d-aac4-a352db00a405",
"Name": "Date",
"Label": "Date (date)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "0c9f888f-5187-4218-b69b-e3b02f5f84d0",
"Name": "Time",
"Label": "Time (time)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "816117df-bedb-4c2b-8b17-046be5f04954",
"Name": "ClientIP",
"Label": "ClientIP IP Address (c-ip)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "8b56b533-52b2-4c90-9c8c-bff00e05104c",
"Name": "UserName",
"Label": "User Name (cs-username)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "97c865b4-cd9f-4e7c-9163-eb3bafdf7a31",
"Name": "ServiceName",
"Label": "Service Name (s-sitename)",
"HelpText": "",
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "d84fd363-736d-4f2f-94df-48833c240c32",
"Name": "ComputerName",
"Label": "ServerName (s-computername)",
"HelpText": null,
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "52514137-54a9-4f7c-b701-3f16b0702ff7",
"Name": "ServerIP",
"Label": "Server IP Address (s-ip)",
"HelpText": "",
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "66c3b111-8c40-4100-bae2-df4cee69c7a4",
"Name": "Method",
"Label": "Method (cs-method)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "c049ab95-a33b-401e-be55-1e5a4f216eab",
"Name": "UriStem",
"Label": "UriStem (cs-uri-stem)",
"HelpText": null,
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "ed535131-6fcd-440c-bf41-9356cc1a6b2f",
"Name": "UriQuery",
"Label": "Uri query (cs-uri-query)",
"HelpText": null,
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "2d2d5072-8d94-4098-99a9-646918128f1a",
"Name": "HttpStatus",
"Label": "Protocol Status (sc-status)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "26839cc3-d338-4637-ba34-09134378dbc9",
"Name": "Win32Status",
"Label": "Win32 Status (sc-win32-status)",
"HelpText": null,
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "b3ddf483-63c6-4f5d-a3db-7e7fc802d8f5",
"Name": "HttpSubStatus",
"Label": "Protocol Substatus (sc-substatus)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "cc63cdc5-6ce0-4476-960e-aa59eb064095",
"Name": "BytesSent",
"Label": "Bytes sent (sc-bytes)",
"HelpText": "",
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "cd121c63-7f76-4259-92aa-d013c7fedb97",
"Name": "BytesRecv",
"Label": "Bytes received (cs-bytes)",
"HelpText": null,
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "da122f26-639e-49fa-b49c-25c281d24bc6",
"Name": "TimeTaken",
"Label": "Time taken (time-taken)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "1343443a-d3d9-4d84-a16b-76ed7d07d668",
"Name": "ProtocolVersion",
"Label": "Protocol version (cs-version)",
"HelpText": null,
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "7ba34ff4-b677-4d4d-8302-a42b6a774295",
"Name": "Host",
"Label": "Host (cs-host)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "96379a19-d9c8-4808-9e2c-29a7e13f89a9",
"Name": "UserAgent",
"Label": "User agent (cs(UserAgent))",
"HelpText": null,
"DefaultValue": "true",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "c8d37be1-16e7-46de-92e0-c037c5227aa0",
"Name": "Cookie",
"Label": "Cookie (cs(Cookie))",
"HelpText": "",
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "4b4877b4-80f0-46fd-b272-26781706d717",
"Name": "Referer",
"Label": "Referer (cs(Referer))",
"HelpText": null,
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "986223cd-eb82-4744-a27c-3dfba3d8c87a",
"Name": "ServerPort",
"Label": "Server Port (s-port)",
"HelpText": "",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
},
{
"Id": "779b89aa-8631-443f-9108-a44acd92f5ef",
"Name": "OriginalIP",
"Label": "Original IP",
"HelpText": "From X-FORWARDED-FOR in request.",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
}
],
"Properties": {
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.ScriptBody": "Import-Module \"WebAdministration\" -ErrorAction Stop\n\nfunction SetIisLogPath {\n param($logPath, $IISsitename)\n write-host \"#Updating IIS Log path\"\n \n if (!(Test-Path \"IIS:\\Sites\\$($IISsitename)\")) {\n write-host \"$IISsitename does not exist in IIS\"\n } else {\n Set-ItemProperty IIS:\\Sites\\$($IISsitename) -name logFile.directory -value $logPath\n write-host \"IIS LogPath updated to $logPath\"\n }\n}\n\nfunction AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun\n{\n param([string] $site) \n\n #Clear existing log definition if it exists. We use site name to make it apparent where it belongs.\n clear-WebConfiguration -PSPath IIS:\\ -Filter \"system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='$site']\"\n\n #Get current powershell execution folder\n $currentLocation = Get-Location\n\n #Create an empty bat which will be populated with appcmd instructions\n $stream = [System.IO.StreamWriter] \"$currentLocation\\$site.bat\"\n\n $stream.WriteLine(\"%systemroot%\\system32\\inetsrv\\appcmd.exe clear config \"\"$site\"\" -section:system.webServer/advancedLogging/server /commit:apphost\")\n\n #Create site specific log definition\n $stream.WriteLine(\"%systemroot%\\system32\\inetsrv\\appcmd.exe set config \"\"$site\"\" -section:system.webServer/advancedLogging/server /+`\"logDefinitions.[baseFileName='$site',enabled='True',logRollOption='Schedule',schedule='Daily',publishLogEvent='False']`\" /commit:apphost\")\n\n #Get all available fields for logging\n $availableFields = Get-WebConfiguration \"system.webServer/advancedLogging/server/fields\"\n\n $targetFields = ((GetIisLogFields).iisHeader)\n Write-Host \"Target fields: \" (($targetFields) -join ',')\n #Add appcmd instruction to add all the selected fields above to be logged as part of the logging\n #The below section can be extended to filter out any unwanted fields\n foreach ($field in $targetFields) {\n \t$f = (($availableFields.Collection) |Where-Object {$_.logHeaderName -eq \"$field\"})\n \tWrite-Host \"Appending \" $f.iisHeader $f.id\n $stream.WriteLine(\"C:\\windows\\system32\\inetsrv\\appcmd.exe set config \"\"$site\"\" -section:system.webServer/advancedLogging/server /+`\"logDefinitions.[baseFileName='$site'].selectedFields.[id='$($f.id)',logHeaderName='$($f.logHeaderName)']`\" /commit:apphost\")\n }\n\n $stream.close()\n\n # execute the batch file create to configure the site specific Advanced Logging\n Start-Process -FilePath $currentLocation\\$site.bat\n Start-Sleep -Seconds 10\n}\n\nfunction GetIisLogFields {\n $IisLogFields = @()\n if ($OctopusParameters['Date'] -eq \"True\") \t\t { $IisLogFields += New-Object PSObject -Property @{id = \"Date\"; iisHeader = \"date\" } }\n if ($OctopusParameters['Time'] -eq \"True\") \t\t { $IisLogFields += New-Object PSObject -Property @{id = \"Time\"; iisHeader = \"time\" } }\n if ($OctopusParameters['ClientIP'] -eq \"True\") \t{ $IisLogFields += New-Object PSObject -Property @{id = \"ClientIP\"; iisHeader = \"c-ip\"} }\n if ($OctopusParameters['UserName'] -eq \"True\") \t{ $IisLogFields += New-Object PSObject -Property @{id = \"UserName\"; iisHeader = \"cs-username\" } }\n if ($OctopusParameters['SiteName'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"SiteName\"; iisHeader = \"s-sitename\" } }\n if ($OctopusParameters['ComputerName'] -eq \"True\") { $IisLogFields += New-Object PSObject -Property @{id = \"ComputerName\"; iisHeader = \"s-computername\" } }\n if ($OctopusParameters['ServerIP'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"ServerIP\"; iisHeader = \"s-ip\" } }\n if ($OctopusParameters['ServerPort'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"ServerPort\"; iisHeader = \"s-port\" } }\n if ($OctopusParameters['Method'] -eq \"True\") \t\t{ $IisLogFields += New-Object PSObject -Property @{id = \"Method\"; iisHeader = \"cs-method\" } }\n if ($OctopusParameters['UriStem'] -eq \"True\") \t \t{ $IisLogFields += New-Object PSObject -Property @{id = \"UriStem\"; iisHeader = \"cs-uri-stem\" } }\n if ($OctopusParameters['UriQuery'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"UriQuery\"; iisHeader = \"cs-uri-query\" } }\n if ($OctopusParameters['HttpStatus'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"HttpStatus\"; iisHeader = \"sc-status\" } }\n if ($OctopusParameters['HttpSubStatus'] -eq \"True\") \t{ $IisLogFields += New-Object PSObject -Property @{id = \"HttpSubStatus\"; iisHeader = \"sc-substatus\" } }\n if ($OctopusParameters['Win32Status'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"Win32Status\"; iisHeader = \"sc-win32-status\" } }\n if ($OctopusParameters['BytesSent'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"BytesSent\"; iisHeader = \"sc-bytes\" } }\n if ($OctopusParameters['BytesRecv'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"BytesRecv\"; iisHeader = \"cs-bytes\" } }\n if ($OctopusParameters['TimeTaken'] -eq \"True\") \t{ $IisLogFields += New-Object PSObject -Property @{id = \"TimeTaken\"; iisHeader = \"TimeTakenMS\" } }\n if ($OctopusParameters['ProtocolVersion'] -eq \"True\") \t{ $IisLogFields += New-Object PSObject -Property @{id = \"ProtocolVersion\"; iisHeader = \"cs-version\" } }\n if ($OctopusParameters['Host'] -eq \"True\") \t\t { $IisLogFields += New-Object PSObject -Property @{id = \"Host\"; iisHeader = \"cs(Host)\" } }\n if ($OctopusParameters['UserAgent'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"UserAgent\"; iisHeader = \"cs(User-Agent)\" } }\n if ($OctopusParameters['Cookie'] -eq \"True\") \t\t{ $IisLogFields += New-Object PSObject -Property @{id = \"Cookie\"; iisHeader = \"cs(Cookie)\" } }\n if ($OctopusParameters['Referer'] -eq \"True\") \t\t { $IisLogFields += New-Object PSObject -Property @{id = \"Referer\"; iisHeader = \"cs(Referer)\" } }\n if ($OctopusParameters['OriginalIP'] -eq \"True\") \t { $IisLogFields += New-Object PSObject -Property @{id = \"OriginalIP\"; iisHeader = \"x-forwarded-for\" } }\n return $IisLogFields \n}\n\nfunction SetForIISAboveV7 {\n param($SiteName)\n [System.Collections.ArrayList]$logFields = ((GetIisLogFields).id)\n $filter = \"/system.applicationHost/sites/site[@Name=\"\"$SiteName\"\"]/logFile\"\n write-host \"Filter: $filter\"\n \n #Clear all existing custom fields...\n clear-WebConfiguration -PSPath IIS:\\ -Filter \"$filter/customFields\"\n \n if ($logFields.Contains(\"OriginalIP\")) { \n add-WebConfiguration -PSPath IIS:\\ -Filter \"$filter/customFields\" -Value @{logFieldName='OriginalIP';sourceType='RequestHeader';sourceName='X-FORWARDED-FOR'}\n }\n \n Write-Host (($logFields) -join ',')\n # This is part of extended logging and cannot be set using the syntax below.\n $logFields.Remove(\"OriginalIP\")\n Set-WebConfigurationProperty -Filter $filter -Value (($logFields) -join ',') -Name \"LogExtFileFlags\"\n}\n\nfunction SetForIISV7 {\n param($site, $logDirectory)\n Write-Host 'Disables http logging module'\n Set-WebConfigurationProperty -Filter system.webServer/httpLogging -PSPath machine/webroot/apphost -Name dontlog -Value true\n Write-Host 'Adding X-Forwarded-For as OriginalIP to advanced logging'\n if (Get-WebConfigurationProperty \"system.webServer/advancedLogging/server/fields\" -Name Collection |Where-Object {$_.id -eq \"OriginalID\"}) {\n\twrite-host \"OriginalID field already exists. Will not modify existing definition.\"\n } else {\n Add-WebConfiguration \"system.webServer/advancedLogging/server/fields\" -value @{id=\"OriginalID\";sourceName=\"X-Forwarded-For\";sourceType=\"RequestHeader\";logHeaderName=\"X-Forwarded-For\";category=\"Default\";loggingDataType=\"TypeLPCSTR\"}\n }\n # Disables the default advanced logging config\n Set-WebConfigurationProperty -Filter \"system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='%COMPUTERNAME%-Server']\" -name enabled -value false\n # Enable Advanced Logging\n Set-WebConfigurationProperty -Filter system.webServer/advancedLogging/server -PSPath machine/webroot/apphost -Name enabled -Value true\n \n # Set log directory at server level\n Set-WebConfigurationProperty -Filter system.applicationHost/advancedLogging/serverLogs -PSPath machine/webroot/apphost -Name directory -Value $logDirectory\n \n # Set log directory at site default level\n Set-WebConfigurationProperty -Filter system.applicationHost/sites/siteDefaults/advancedLogging -PSPath machine/webroot/apphost -Name directory -Value $logDirectory\t\n\n AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun $site\t\n}\n\nWrite-Host \"Value of UriQuery parameter \" $OctopusParameters['UriQuery']\n$logPath = $OctopusParameters['IISLogPath']\n$IISsitename = $OctopusParameters['webSiteName']\n$iisMajorVersion = (get-itemproperty HKLM:\\SOFTWARE\\Microsoft\\InetStp\\ |select MajorVersion).MajorVersion\nif ($iisMajorVersion -gt 7) {\n SetForIISAboveV7 $OctopusParameters['SiteName'] \n SetIisLogPath $OctopusParameters['iisLogDirectory'] $OctopusParameters['SiteName']\n} elseif ($iisMajorVersion -lt 7) {\n Write-Host 'Cannot handle IIS versions below 7. Found IIS version ' $iisMajorVersion\n exit 1\n} else {\n SetForIISV7 $OctopusParameters['SiteName'] $OctopusParameters['iisLogDirectory']\n}\n\n",
"Octopus.Action.RunOnServer": "false",
"Octopus.Action.Script.ScriptFileName": null,
"Octopus.Action.Package.FeedId": null,
"Octopus.Action.Package.PackageId": null
},
"Category": "IIS",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/iis-website-set-log-format.json",
"Website": "/step-templates/e46aad55-5484-48a7-a90d-970d40129893",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Friday, December 22, 2017