@ -20,42 +20,40 @@
# WANT_JSON
# WANT_JSON
# POWERSHELL_COMMON
# POWERSHELL_COMMON
$params = Parse-Args $args
$params = Parse-Args $args ;
# Name parameter
# Name parameter
$name = Get-Attr $params " name " $FALSE ;
$name = Get-AnsibleParam -obj $params -name " name " -type " string " -failifempty $true
If ( $name -eq $FALSE ) {
Fail-Json ( New-Object psobject ) " missing required argument: name " ;
}
# State parameter
# State parameter
$state = Get-Attr $params " state " $FALSE ;
$state = Get-AnsibleParam -obj $params -name " state " -default " present " -validateSet " started " , " restarted " , " stopped " , " absent "
$valid_states = ( 'started' , 'restarted' , 'stopped' , 'absent' ) ;
If ( ( $state -Ne $FALSE ) -And ( $state -NotIn $valid_states ) ) {
Fail-Json $result " state is ' $state '; must be $( $valid_states ) "
}
# Attributes parameter - Pipe separated list of attributes where
# Attributes parameter - Pipe separated list of attributes where
# keys and values are separated by comma (paramA:valyeA|paramB:valueB)
# keys and values are separated by comma (paramA:valyeA|paramB:valueB)
$attributes = @ { } ;
$attributes = @ { } ;
If ( Get-Member -InputObject $params -Name attributes ) {
If ( Get-Member -InputObject $params -Name attributes ) {
$params . attributes -split '\|' | foreach {
$params . attributes -split '\|' | foreach {
$key , $value = $_ -split " \: " ;
$key , $value = $_ -split " \: "
$attributes . Add ( $key , $value ) ;
$attributes . Add ( $key , $value )
}
}
}
}
# Ensure WebAdministration module is loaded
# Ensure WebAdministration module is loaded
if ( ( Get-Module " WebAdministration " -ErrorAction SilentlyContinue ) -eq $NULL ) {
if ( ( Get-Module " WebAdministration " -ErrorAction SilentlyContinue ) -eq $NULL ) {
Import-Module WebAdministration
Import-Module WebAdministration
$web_admin_dll_path = Join-Path $env:SystemRoot system32 \ inetsrv \ Microsoft . Web . Administration . dll
Add-Type -Path $web_admin_dll_path
$t = [ Type ] " Microsoft.Web.Administration.ApplicationPool "
}
}
# Result
# Result
$result = New-Object psobject @ {
$result = @ {
changed = $FALSE
changed = $FALSE
attributes = $attributes
# attributes = $attributes
} ;
}
$result . attributes = $attributes
# Get pool
# Get pool
$pool = Get-Item IIS : \ AppPools \ $name
$pool = Get-Item IIS : \ AppPools \ $name
@ -77,9 +75,15 @@ try {
if ( $pool ) {
if ( $pool ) {
# Set properties
# Set properties
$attributes . GetEnumerator ( ) | foreach {
$attributes . GetEnumerator ( ) | foreach {
$newParameter = $_ ;
$newParameter = $_
$currentParameter = Get-ItemProperty ( " IIS:\AppPools\ " + $name ) $newParameter . Key
$currentParameter = Get-ItemProperty ( " IIS:\AppPools\ " + $name ) $newParameter . Key
if ( -not $currentParameter -or ( $currentParameter . Value -as [ String ] ) -ne $newParameter . Value ) {
$currentParamVal = " "
try {
$currentParamVal = $currentParameter
} catch {
$currentParamVal = $currentParameter . Value
}
if ( -not $currentParamVal -or ( $currentParamVal -as [ String ] ) -ne $newParameter . Value ) {
Set-ItemProperty ( " IIS:\AppPools\ " + $name ) $newParameter . Key $newParameter . Value
Set-ItemProperty ( " IIS:\AppPools\ " + $name ) $newParameter . Key $newParameter . Value
$result . changed = $TRUE
$result . changed = $TRUE
}
}
@ -90,7 +94,7 @@ try {
Stop-WebAppPool -Name $name -ErrorAction Stop
Stop-WebAppPool -Name $name -ErrorAction Stop
$result . changed = $TRUE
$result . changed = $TRUE
}
}
if ( ( ( $state -eq 'started' ) -and ( $pool . State -eq 'Stopped' ) ) ) {
if ( ( $state -eq 'started' ) -and ( $pool . State -eq 'Stopped' ) ) {
Start-WebAppPool -Name $name -ErrorAction Stop
Start-WebAppPool -Name $name -ErrorAction Stop
$result . changed = $TRUE
$result . changed = $TRUE
}
}
@ -114,10 +118,22 @@ if ($pool)
$result . info = @ {
$result . info = @ {
name = $pool . Name
name = $pool . Name
state = $pool . State
state = $pool . State
attributes = New-Object psobject @ { }
attributes = @ { }
} ;
} ;
$pool . Attributes | ForEach { $result . info . attributes . Add ( $_ . Name , $_ . Value ) } ;
$pool . Attributes | ForEach {
# lookup name if enum
if ( $_ . Schema . Type -eq 'enum' ) {
$propertyName = $_ . Name . Substring ( 0 , 1 ) . ToUpper ( ) + $_ . Name . Substring ( 1 )
$enum = [ Microsoft.Web.Administration.ApplicationPool ] . GetProperty ( $propertyName ) . PropertyType . FullName
$enum_names = [ Enum ] :: GetNames ( $enum )
$result . info . attributes . Add ( $_ . Name , $enum_names [ $_ . Value ] )
} else {
$result . info . attributes . Add ( $_ . Name , $_ . Value ) ;
}
}
}
}
Exit-Json $result
Exit-Json $result