IIS Powershell User guide - Comparing representative IIS UI tasks

  1. [File System] Open Explorer window for Default Web Site's home directory
    $path=$(get-item 'iis:sitesdefault web site').physicalPath
    $path=[system.environment]::ExpandEnvironmentVariables($path)
    explorer $path
    

    Related UI Task:"Explorer"

  2. [File System] Open Explorer window for Default Web Site's home directory using "DirectoryName" property
    $path=$(get-item 'iis:sitesdefault web siteiisstart.htm').directoryName
    explorer $path
    

    Related UI Task:"Explorer"

  3. [File System] Create File and set file content programmatically
    $file=new-item demo.htm -type file
    set-content $file.FullName "Hey, dude!"
    

    Related UI Task:"Explorer"

  4. [File System] Set "Deny" for administrator user account for 'iisstart.htm' file and grant access permission for NTAccount
    $file=$(get-item "iis:sitesDefault Web Siteiisstart.htm ")
    $dacl=$file.GetAccessControl()
    $newRule=New-Object Security.AccessControl.FileSystemAccessRule Administrator, Modify, Deny
    $modified=$false
    $dacl.ModifyAccessRule("Add", $newRule, [ref]$modified)
    $file.SetAccessControl($dacl)
    $file.GetAccessControl().GetAccessRules($true, $true, [System.Security.Principal.NTAccount])

    Related UI Task:"Edit Permissions..."

  5. [Application Pool] Get the list of application pools
    dir iis:apppools
    

    Related UI Task:"Application Pools" treeview

  6. [Application Pool] Create a new pool
    New-Item iis:apppoolsdemoAppPool
    

    Or, you can use other task-based cmdlet(s) instead:

    New-AppPool demoAppPool
    

    NOTE: New-AppPool cannot use full path name such as “iis:appPoolsdemoAppPool” like other user-friendly-named cmdlets

    Related UI Task:"Add Application Pool..."

  7. [Application Pool] Rename an Application Pool
    Rename-Item iis:apppoolsdefaultapppool newAppPoolName
    

    Related UI Task:"Rename "

  8. [Application Pool] Remove an Application Pool
    Remove-Item iis:apppoolsdefaultapppool
    

    Or, you can use other task-based  cmdlet(s) instead:

    Remove-AppPool defaultapppool
    

    Related UI Task:"Remove "

  9. [Application Pool] Stop/Start/Recycle Application Pool
    Start-WebItem IIS:AppPoolsDefaultAppPoolStop-WebItem IIS:AppPoolsDefaultAppPoolRestart-WebItem IIS:AppPoolsDefaultAppPool
    

    Or, you can use other task-based cmdlet(s) instead:

    Start-AppPool DefaultAppPool
    Stop-AppPool DefaultAppPool
    Restart-AppPool DefaultAppPool
    

    Related UI Task:"Stop/Start/Recycle"

  10. [Application Pool] Get the current status of Application Pool
    Get-WebItemState iis:apppoolsdefaultapppool
    

    Or, you can use other task-based  cmdlet(s) instead:

    Get-AppPoolState defaultapppool
    

    Related UI Task:"Stop/Start/Recycle"

  11. [Application Pool] Get the list of application which is belonged to an Application Pool
    function ConvertFrom-ItemXPath($itemXpath)
    {
        $result = new-object psobject
     
        $tempString = $itemXPath.substring($itemXPath.IndexOf("@name"))   
        add-member -in $result noteproperty Site $tempString.Split("'")[1]
     
        $tempString = $itemXPath.substring($itemXPath.IndexOf("@path"))
        add-member -in $result noteproperty Application $tempString.Split("'")[1]
        return $result
    }
     
    $applications = get-webconfiguration //application[@applicationPool]
    $applications | select itemXpath, applicationpool | foreach {if ($_.applicationPool -eq "DefaultAppPool") {ConvertFrom-ItemXPath ($_.itemXpath)}}
    

    Related UI Task:"View Applications"

  12. [Application Pool] Get Application Pool Default Settings
    $subsections=get-webconfiguration //applicationPoolDefaults//. -PSPATH iis:
    $subsections | foreach { $_.attributes | select name,value }
    
    PS IIS:\> $subsections = get-webconfiguration //applicationPoolDefaults//.
    PS IIS:\> $subsections | foreach { $_.attributes | select name,value } 
    Name                                    Value
    ----                                    -----
    namequeueLength                         1000
    autoStart                               True
    enable32BitAppOnWin64                   False
    managedRuntimeVersion                   v2.0
    enableConfigurationOverride             True
    managedPipelineMode                     0
    passAnonymousToken                      True
    identityType                            2
    userName
    password
    loadUserProfile                         False
    manualGroupMembership                   False
    idleTimeout                             00:20:00
    maxProcesses                            1
    shutdownTimeLimit                       00:01:30
    startupTimeLimit                        00:01:30
    pingingEnabled                          True
    pingInterval                            00:00:30
    pingResponseTime                        00:01:30
    disallowOverlappingRotation             False
    disallowRotationOnConfigChange          False
    logEventOnRecycle                       137
    memory                                  0
    privateMemory                           0
    requests                                0
    time                                    1.05:00:00
    value                                   11:59:00
    value                                   11:32:00
    loadBalancerCapabilities                1
    orphanWorkerProcess                     False
    orphanActionExe
    orphanActionParams
    rapidFailProtection                     False
    rapidFailProtectionInterval             00:05:00
    rapidFailProtectionMaxCrashes           5
    autoShutdownExe
    autoShutdownParamslimit                 0
    action                                  0
    resetInterval                           00:05:00
    smpAffinitized                          False
    smpProcessorAffinityMask                4294967295
    

    logEventOnRecyle property value shows number value, which is not human-readable. You can get the text enum value by querying the specific property instead such as shown in the following:

    get-webconfiguration //applicationPoolDefaults/recycling/@logEventOnRecycle
    
    PS IIS:\> get-webconfiguration //applicationPoolDefaults/recycling/@logEventOnRecycleTime,Memory
    

    Related UI Task:"Set Application Pool Defaults..."

  13. [Application Pool] Set Application Pool Default Settings

    Case1: Setting queueLength, which is “property” type

    set-webconfigurationproperty /system.applicationHost/applicationPools/applicationPoolDefaults[1]/failure[1] -name rapidFailProtectionMaxCrashes -value 10
    
    # You could get the section path of the target property programmatically
    PS IIS:\> get-webconfiguration //*[@rapidFailProtectionMaxCrashes] | foreach {$_.itemXPath}/system.applicationHost/applicationPools/applicationPoolDefaults[1]/failure[1]/system.applicationHost/applicationPools/add[@name='DefaultAppPool']/failure[1]/system.applicationHost/applicationPools/add[@name='Classic .NET AppPool']/failure[1] 
    # Set the property value with the section path
    PS IIS:\> set-webconfigurationproperty /system.applicationHost/applicationPools/applicationPoolDefaults[1]/failure[1] -name rapidFailProtectionMaxCrashes -value 10 
    NOTE: “applicationPoolDefaults[1]/failure[1]” is equivalent to “applicationPoolDefaults/failure”.
    

    Case2: Setting schedule, which is “element” type (shown as “Specific Times” in UI)

    add-webconfiguration /system.applicationHost/applicationPools/applicationPoolDefaults/recycling/periodicRestart/schedule -value (New-TimeSpan -h 9 -m30)
    
    # Add new ‘Add’ element with a new-timespan value and add-webconfiguration cmdlet
    PS IIS:\> add-webconfiguration /system.applicationHost/applicationPools/applicationPoolDefaults/recycling/periodicRestart/schedule -value (New-TimeSpan -h 9 -m30) # Confirm the new value is added
    PS IIS:\> get-webconfiguration /system.applicationHost/applicationPools/applicationPoolDefaults/recycling/periodicRestart/schedule/add | select value value-----09:30:00
    

    Related UI Task:"Set Application Pool Defaults..."

  14. [Application Pool] Get configuration settings for a specific application pool
    $configSection="/system.applicationHost/applicationPools/add[@name='DefaultAppPool']//."
    $subsections=get-webconfiguration $configSection -PSPath iis:
    $subsections | foreach { $_.attributes | select name,value }
    

    Or, you can use “*” instead of the full config section path:

    $subsections=get-webconfiguration '//*[@name="DefaultAppPool"]//.' -PSPath iis:
    $subsections | foreach { $_.attributes | select name,value }
    

    Related UI Task:"Advanced Settings..."

  15. [Application Pool] Set configuration settings for a specific application pool

    Case1: Setting logEventOnRecycle, which is "enum property" type

    $configSection="/system.applicationHost/applicationPools/add[@name='DefaultAppPool']/recycling"
    set-webconfigurationproperty $configSection -name logEventOnRecycle -value 1 -PSPath iis:\
    

    NOTE: The value could be set with "Time" in the next version instead of 1 for the above example

    Related UI Task:"Advanced Settings..."

  16. [Application Pool] Get the list of application pools
    Dir iis:sites
    

    Related UI Task:"Sites" treeview

  17. [Sites] Create a new Web Site

    Case1: Create web site with single binding

    $binding=@{protocol="http";bindingInformation="*:80:hostname"}
    new-item "iis:sitesdemoSite" -type site –physicalPath c:demoSite -bindings $binding
    

    Case2: Create web site with multiple binding and specific id

    $binding=(@{protocol="http";bindingInformation="*:80:hostname"},@{protocol="http";bindingInformation="*:80:hostname2"})
    new-item "iis:sitesdemoSite" -type site -physicalPath c:demoSite -bindings $binding -id 555
    

    Or, you can use other task-based cmdlet(s) instead:

    New-WebSite -Name DemoSite -Port 80 -HostHeader hostname –PhysicalPath c:demoSite –ID 555
    New-WebBinding -Site DemoSite -Port 80 -IPAddress * -HostHeader hostname2
    

    Related UI Task:"Add Web Site..." wizard

  18. [Sites] Set bindings

    Case1: Create SSL Binding (127.0.0.1!443)

    $certObect=get-item cert:LocalMachineMyE48803C3A6DDC8F2BFE3D8B7B7D56BBA70270F92new-item IIS:SslBindings127.0.0.1!443 -value $certObect
    
    PS IIS:\> dir cert:\LocalMachine\My     Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My  
    Thumbprint                                Subject
    ----------                                -------
    E48803C3A6DDC8F2BFE3D8B7B7D56BBA70270F92  CN=WMSvc-JHKIM-WTT3 
    
    PS IIS:\> $certObect = get-item cert:\LocalMachine\My\E48803C3A6DDC8F2BFE3D8B7B7D56BBA70270F92 
    PS IIS:\> new-item IIS:\SslBindings\127.0.0.1!443 -value $certObect 
    IP Address       Port Store            Sites
    ----------       ---- -----            -----
    127.0.0.1        443  My
    

    Case2: Set 'Bindings' property with multiple binding information including the SSL binding which was created above.

    $newBinding=(@{protocol="http";bindingInformation="127.0.0.1:80:normalSite"},@{protocol="https";bindingInformation="127.0.0.1:443:securedSite"})
    Set-itemproperty "IIS:SitesDefault Web Site" -name bindings -value $newBinding
    

    Or, you can use other task-based  cmdlet(s) instead:

    New-WebBinding -Site "Default Web Site" -Port 443 -IPAddress 127.0.0.1 -HostHeader securedSite
    

    NOTE: you can also use set-webconfiguration, set-webconfiguration or add-webconfigurationProperty.

    Set-Webconfiguration '/system.applicationHost/sites/site[@name="Default Web Site"]/bindings' -value $newBinding  -PSPath iis:
    Set-WebconfigurationProperty '/system.applicationHost/sites/site[@name="Default Web Site"]' -name bindings.collection -value $newBinding -at 0  -PSPath iis:
    Add-WebconfigurationProperty '/system.applicationHost/sites/site[@name="Default Web Site"]' -name bindings.collection -value @{protocol="https";bindingInformation="127.0.0.1:443:securedSite"} -at 0  -PSPath iis:
    

    Case3: Change a certain value of existing 'Bindings' property using other task-based  cmdlet.

    Set-WebBinding -Site "Default Web Site" -Port 443 -IPAddress 127.0.0.1 -HostHeader securedSite -name Port -value 444
    

    Case4: Removing binding information using other task-based  cmdlet.

    Remove-WebBinding -Site "Default Web Site" -Port 443 -IPAddress 127.0.0.1 -HostHeader securedSite
    

    Or, you can use Remove-WebConfigurationProperty

    Remove-WebconfigurationProperty '/system.applicationHost/sites/site[@name="Default Web Site"]' -name Bindings.collection -at @{protocol="https";bindingInformation="127.0.0.1:443:securedSite"}  -PSPath iis:
    

    Case5:  Clear all the binding information of a certain web site

    Clear-Webconfiguration '/system.applicationHost/sites/site[@name="Default Web Site"]/bindings' -PSPath iis:
    

    NOTE: you can also use clear-itemproperty instead:

    Clear-ItemProperty 'iis:sitesDefault Web Site' -name bindings
    

    Related UI Task:"Bindings..."

  19. [Sites] Rename an Web Site
    Rename-Item "iis:sitesdefault web site" newWebSiteName
    

    Related UI Task:"Rename"

  20. [Sites] Remove an Web Site
    Remove-Item "iis:sitesdefault web site"
    

    Or, you can use other task-based  cmdlet(s) instead:

    Remove-WebSite " default web site"
    

    Related UI Task:"Remove "

  21. [Sites] Stop/Start/Restart Web Site
    Start-WebItem "IIS:SitesDefault Web Site"
    Stop-WebItem "IIS:SitesDefault Web Site"
    Restart-WebItem "IIS:SitesDefault Web Site"
    

    Or, you can use other task-based  cmdlet(s) instead:

    Start-WebSite "Default Web Site"
    Stop-WebSite "Default Web Site"
    Restart-WebSite "Default Web Site"
    

    Related UI Task:"Stop/Start/Restart"

  22. [Sites] Get the current status of Web Site
    Get-WebItemState "IIS:SitesDefault Web Site"
    

    Or, you can use other task-based  cmdlet(s) instead:

    Get-WebSiteState "Default Web Site"
    

    Related UI Task:"Stop/Start/Recycle"

  23. [Sites] Get Web Site Defaults Settings
    $subsections=get-webconfiguration //siteDefaults//. -PSPATH iis:
    $subsections | foreach { $_.attributes | select name,value }
    
    PS IIS:\> $subsections = get-webconfiguration //siteDefaults//. -PSPATH iis:\
    PS IIS:\> $subsections | foreach { $_.attributes | select name,value } 
    Name                                    Value
    ----                                    -----
    nameid                                      0
    serverAutoStart                         True
    maxBandwidth                            4294967295
    maxConnections                          4294967295
    connectionTimeout                       00:02:00
    logExtFileFlags                         2215887
    customLogPluginClsidlogFormat                               2
    directory                               %SystemDrive%\inetpub\logs\LogFiles
    period                                  1
    truncateSize                            20971520
    localTimeRollover                       False
    enabled                                 True
    enabled                                 False
    directory                               %SystemDrive%\inetpub\logs\FailedReq...
    maxLogFiles                             50
    maxLogFileSizeKB                        512
    customActionsEnabled                    False
    allowUTF8                               True
    serverAutoStart                         True
    unauthenticatedTimeout                  30
    controlChannelTimeout                   120
    dataChannelTimeout                      30
    disableSocketPooling                    False
    serverListenBacklog                     60
    minBytesPerSecond                       240
    maxConnections                          4294967295
    resetOnMaxConnections                   False
    maxBandwidth                            4294967295
    matchClientAddressForPort               True
    matchClientAddressForPasv               True
    maxCommandLine                          4096
    allowUnlisted                           True
    serverCertHashserverCertStoreName       MY
    ssl128                                  False
    controlChannelPolicy                    1
    dataChannelPolicy                       1
    clientCertificatePolicy                 0
    useActiveDirectoryMapping               False
    validationFlags                         0
    revocationFreshnessTime                 00:00:00
    revocationUrlRetrievalTimeout           00:01:00
    enabled                                 False
    userName                                IUSRpassword
    defaultLogonDomain                      NT AUTHORITY
    logonMethod                             3
    enabled                                 False
    defaultLogonDomain
    logonMethod                             3
    enabled                                 False
    impersonationLevel                      1
    exitMessage
    greetingMessage
    bannerMessage
    maxClientsMessage
    suppressDefaultBanner                   False
    allowLocalDetailedErrors                True
    expandVariables                         False
    keepPartialUploads                      False
    allowReplaceOnRename                    False
    allowReadUploadsInProgress              False
    externalIp4Addressmode                  4
    adUserName
    adPasswordadCacheRefresh                00:01:00
    showFlags                               0
    virtualDirectoryTimeout                 5
    logExtFileFlags                         14716367
    directory                               D:\inetpub\logs\LogFiles
    period                                  1
    truncateSize                            20971520
    localTimeRollover                       False
    enabled                                 True
    selectiveLogging                        7
    

    Related UI Task:"Set Web Site Defaults..."

  24. [Sites] Set Web Site Default Settings

    Case1: Setting connectionTimeout

    set-webconfigurationproperty "/system.applicationHost/sites/siteDefaults[1]/limits[1]" -name connectionTimeout -value (New-TimeSpan -sec 130)
    
    # You could get the section path of the target property programmatically
    PS IIS:\> get-webconfiguration //*[@connectionTimeout] | foreach {$_.itemxpath}/system.applicationHost/webLimits/system.applicationHost/sites/siteDefaults[1]/limits[1]/system.applicationHost/sites/site[@name='Default Web Site' and @id='1']/limits[1]  
    # Set the property value with the section path
    PS IIS:\> set-webconfigurationproperty "/system.applicationHost/sites/siteDefaults[1]/limits[1]" -name connectionTimeout -value (New-TimeSpan -sec 130)
    

    Related UI Task:"Set Web Site Defaults..."

  25. [Sites] Get configuration settings for a specific web site
    $configSection="/system.applicationHost/sites/site[@name='Default Web Site']//."
    $subsections=get-webconfiguration $configSection -PSPath iis:
    $subsections | foreach { $_.attributes | select name,value }
    

    Or, you can use “*” instead of the full config section path:

    $subsections=get-webconfiguration '//*[@name="Default Web Site"]//.' -PSPath iis:
    $subsections | foreach { $_.attributes | select name,value }
    

    Related UI Task:"Advanced Settings..."

  26. [Sites] Set configuration settings for a specific web site

    Case1: Setting maxLogFiles

    $configSection="/system.applicationHost/sites/site[@name='Default Web Site' and @id='1']/traceFailedRequestsLogging"
    set-webconfigurationproperty $configSection -name maxLogFiles -value 60 -PSPath iis:
    

    If you are trying to change basic properties, you could also use set-itemProperty as shown in the following:

    Case2: 'Application Pool' property

    Set-Itemproperty IIS:SitesDemoSite -name applicationPool -value demo AppPool
    

    Case3: 'Physical Path' property

    set-itemproperty IIS:SitesDemoSite -name physicalPath -value c:demoSite2
    

    Case4: 'username' property

    set-itemproperty IIS:SitesDemoSite -name userName -value newUserId
    

    Case5: 'password' property

    set-itemproperty IIS:SitesDemoSite -name password -value newPassword
    

     Related UI Task:"Advanced Settings..." 

  27. [Sites] Set Failed Request Tracing for a specific web site

    Case1: Enable Freb for a specific web site with setting maxLogFiles and directory

    $configSection="/system.applicationHost/sites/site[@name='Default Web Site' and @id='1']/traceFailedRequestsLogging"
    set-webconfigurationproperty $configSection -name maxLogFiles -value 60 -PSPath iis:
    set-webconfigurationproperty $configSection -name directory -value c:MyFailedReqLogFiles -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    Enable-Freb -Site "default web site" -Directory "c:MyFailedReqLogFiles" -MaxLogFileSize 555
    

    Case2: Disable Freb for a specific web site

    $configSection="/system.applicationHost/sites/site[@name='Default Web Site' and @id='1']/traceFailedRequestsLogging"
    set-webconfigurationproperty $configSection -name enabled -value false -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    Disable-Freb -Site "default web site"
    

    Case3: Clear Freb data for a specific web site

    If you use Enable-Freb, it creates following default setting of Freb settings for the specified sites. We can clear them by this way.

    <?xml version="1.0" encoding="UTF-8"?><configuration>    <system.webServer>        <tracing>            <traceFailedRequests>                <add path="*">                    <traceAreas>                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module" verbosity="Verbose" />                        <add provider="ASP" verbosity="Verbose" />                        <add provider="ISAPI Extension" verbosity="Verbose" />                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />                    </traceAreas>                    <failureDefinitions timeTaken="00:00:30" statusCodes="500" verbosity="Warning" />                </add>            </traceFailedRequests>        </tracing>    </system.webServer></configuration>
    
    Clear-WebConfiguration /system.webServer/tracing/traceFailedRequests -PSPath "iis:sitesdefault web site"
    

    Or, you can use other task-based  cmdlet(s) instead:

    Clear-FrebData -Site "default web site"
    

    Related UI Task:"Advanced Settings..."

  28. [Management] Read default feature Delegation settings

    Case1: Dump all sectionGroups

    get-webconfigurationproperty / -name sectiongroups
    

    Case2: Dump specific sectionGroup such as "system.applicationHost"

    get-webconfigurationproperty / -name sectiongroups["system.applicationHost"]

    Case3: Dump all sections under "/" group

    get-webconfigurationproperty / -name Sections
    

    NOTE: You will see empty value because IIS configuration system does not have section under "root" level by default

    Case4: Dump all sections under specific sectionGroup such as "system.webServer"

    $sections=get-webconfigurationproperty /system.webserver -name Sections
    $sections | select Name,OverrideModeDefault
    
    PS IIS:\> $sections = get-webconfigurationproperty /system.webserver -name Sections
    PS IIS:\> $sections | select Name,OverrideModeDefault 
    Name                                                        OverrideModeDefault
    ----                                                        -------------------
    httpProtocol                                                Allow
    httpErrors                                                  Deny
    httpRedirect                                                Allow
    globalModules                                               Deny
    cgi                                                         Deny
    serverRuntime                                               Deny
    directoryBrowse                                             Allow
    urlCompression                                              Allow
    httpLogging                                                 Deny
    modules                                                     Deny
    odbcLogging                                                 Deny
    validation                                                  Allow
    fastCgi                                                     Deny
    handlers                                                    Deny
    httpTracing                                                 Deny
    staticContent                                               Allow
    isapiFilters                                                Deny
    defaultDocument                                             Allow
    asp                                                         Deny
    httpCompression                                             Deny
    serverSideInclude                                           Deny
    caching                                                     Allow
    

    NOTE: Now you can see the default override mode for "ASP" config section is deny, which means we can configure ASP related properties only for 'server' level

    Related UI Task:UI Feature: "Feature Delegation" page

  29. [Management] Add/Remove customized IIS config section

    Case1: Add "myGroup" sectiongroup under root

    add-webconfigurationproperty / -name SectionGroups -value myGroup
    

    Case2: Add "mySection" section under the myGroup sectiongroup which was created above

    add-webconfigurationproperty /myGroup -name Sections -value mySection
    

    Case3: Set OverrideModeDefault for the newly created section, "mySection"

    set-webconfigurationproperty /myGroup -name Sections["mySection"].OverrideModeDefault -value Deny
    

    Case4: Set AllowDefinition for the newly created section, "mySection"

    set-webconfigurationproperty /myGroup -name Sections["mySection"].AllowDefinition -value AppHostOnly

    Case5: Set AllowLocation for the newly created section, "mySection"

    set-webconfigurationproperty /myGroup -name Sections["mySection"].AllowLocation -value false

    Case6: Remove the "mySection" section which were created above

    remove-webconfigurationproperty /myGroup -name Sections -at mySection

    Case7: Remove the "myGroup" sectiongroup which were created above

    remove-webconfigurationproperty / -name SectionGroups -at myGroup

    Related UI Task:UI Feature: UI has no related task for this.

  30. [Management] Configure Feature Delegation related settings

    NOTE: Before changing delegation setting of a config section, you would need to remove previously configured properties and elements of the section and re-configure them again after the delegation setting is updated.

    This is an example of how to remove ASP sections using clear-webconfiguration cmdlet:

    clear-webconfiguration /system.webServer/asp -pspath MACHINE/WEBROOT/A
    PPHOST/testSite
    clear-webconfiguration /system.webServer/asp -pspath MACHINE/WEBROOT/A
    PPHOST
    
    # Get the list of previously configured items using -recurse option
    PS IIS:\> get-webconfiguration //asp -Recurse 
    SectionPath                             PSPath
    -----------                             ------
    /system.webServer/asp                   MACHINE/WEBROOT/APPHOST/system.webServer/asp                   MACHINE/WEBROOT/APPHOST/testSite 
    # Clear those items using clear-webconfiguration
    PS IIS:\> clear-webconfiguration /system.webServer/asp -pspath MACHINE/WEBROOT/APPHOST/testSitePS IIS:\> clear-webconfiguration /system.webServer/asp -pspath MACHINE/WEBROOT/APPHOST
    

    Case1: Read the current Delegation setting of ASP feature for 'server' level

    get-webconfiguration //asp iis: | select OverrideMode
    
    PS IIS:\> get-webconfiguration //asp iis:\ | select 
    OverrideMode                                                                                                           
    OverrideMode------------Inherit
    

    NOTE: The value "inherit" means it uses the default override mode and it is actually "Deny" in the default IIS configuration

    Case2: Set "Read-Write" for ASP feature for 'server' level

    set-webconfiguration //asp -metadata overrideMode -value Allow -PSPath iis:
    

    Case3: Set "Not Delegated" for ASP feature for 'server' level

    NOTE: "Not Delegated" task is only applicable to IIS UI world. Please use "Read Only" which is explained below.

    Case4: Set "Read Only" for ASP feature for 'server' level

    set-webconfiguration //asp -metadata overrideMode -value Deny -PSPath iis:
    

    Case5: Set "Reset to Inherited" for ASP feature for 'server' level

    set-webconfiguration //asp -metadata overrideMode -value Inherit -PSPath iis:
    

    Case6: Change Delegation settings for 'site' level

    set-webconfiguration //asp -metadata overrideMode -value Inherit -PSPath "iis:sitesdefault web site"
    

    Case7: Change Delegation settings for 'site' level using location

    set-webconfiguration //asp -metadata overrideMode -value Inherit -PSPath "iis:sites" -Location "default web site"
    

    Related UI Task:UI Feature: "Feature Delegation" page

  31. [IIS] Configure Clasic ASP properties

    Case1: Read all ASP settings from 'server' level

    $subsections=get-webconfiguration //asp//. -PSPATH iis:
    $subsections | foreach { $_.attributes | select name,value }
    

    Case2: Read all ASP settings from 'web site' level such as "Default Web Site"

    $subsections=get-webconfiguration //asp//. -PSPATH "iis:sitesdefault web site"
    $subsections | foreach { $_.attributes | select name,value }
    

    Case3: Read all ASP settings from 'web application' level such as "DemoApplication "

    $subsections=get-webconfiguration //asp//. -PSPATH "iis:sitesdefault web sitedemoapplication"
    $subsections | foreach { $_.attributes | select name,value }
    

    Case4: Read all ASP settings from 'file' level which is under an Web Site

    $subsections=get-webconfiguration //asp//. -PSPATH "iis:sitesdefault web site" -location iisstart.htm
    $subsections | foreach { $_.attributes | select name,value }
    

    Case5: Write an ASP setting, keepSessionIdSecure, for 'server' level

    set-webconfigurationproperty "/system.webServer/asp/session[1]" -name keepSessionIdSecure -value true -PSPath iis:
    
    # You could get the section path of the target property programmatically
    PS IIS:> get-webconfiguration //*[@keepSessionIdSecure] | foreach {$_.itemxpath}/system.webServer/asp/session[1]
    # Set the property value with the section path
    PS IIS:> set-webconfigurationproperty "/system.webServer/asp/session[1]" -name keepSessionIdSecure -value true -PSPath iis:
    

    Case6: Write an ASP setting, keepSessionIdSecure, for 'site' level

    set-webconfigurationproperty "/system.webServer/asp/session[1]" -name keepSessionIdSecure -value true -PSPath "iis:sitesdefault web site"
    

    Case5: Write an ASP setting, keepSessionIdSecure, for 'file' level which is under an Web Site

    set-webconfigurationproperty "/system.webServer/asp/session[1]" -name keepSessionIdSecure -value true -PSPath "iis:sitesdefault web site" -location iisstart.htm

     Related UI Task:UI Feature: "ASP" page 

  32. [IIS] Configure Authentication properties

    Case1: List all of authentications and from 'server' level

    get-webconfiguration /system.webServer/security/authentication/*[@enabled] -PSPath iis: | select ItemXPath,enabled
    

    Case2: List all of authentications and from 'site' level

    get-webconfiguration /system.webServer/security/authentication/*[@enabled] -PSPath "iis:sitesdefault web site"| select ItemXPath,enabled
    

    NOTE: You can also get from other levels adjusting the value -PSPath and -Location parameter values

    Case3: Get all of Anonymous authentication properties from 'server' level

    $attributes=(Get-WebConfiguration /system.webServer/security/authentication/anonymousAuthentication -PSPath iis:).attributes
    $attributes | select name,value
    

    NOTE: You can also get from other levels adjusting the value -PSPath and -Location parameter values

    Case4: Change userName property for Anonymous authentication properties from 'server' level

    Set-WebConfigurationproperty system.webServer/security/authentication/anonymousAuthentication -name userName -value "" -PSPath iis:
    

    NOTE: You can also set for other levels adjusting the value -PSPath and -Location parameter values

    Related UI Task:UI Feature: "Authentication" page

  33. [IIS] Configure Module elements and properties which are configured in globalModules section

    Case1: List all native modules

    (Get-WebConfiguration //globalmodules).collection -PSPath iis:

    Case2: Add a new native modue at the bottom index of the existing modules

    Add-WebConfigurationProperty //globalmodules -name collection -value @{name='testmodule';image='c:test.dll'} -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    New-WebModule -Name testmodule -Image c:test.dll -Precondition "integratedMode"
    

    Case3: Add a new native modue at the top index of the existing modules

    Add-WebConfigurationProperty //globalmodules -name collection -value @{name='testmodule';image='c:test.dll'} -at 0 -PSPath iis:
    

    Case4: Remove a native modue with a number index value

    Remove-WebConfigurationProperty //globalmodules -name collection -at 0 -PSPath iis:
    

    Case5: Remove a native modue with a hashtable index value

    Remove-WebConfigurationProperty //globalmodules -name collection -at @{name='testmodule';image='c:test.dll'} -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    Remove-WebModule -Name testmodule
    

    Case6: Get the attributes for a specific module

    $modules=(get-webconfiguration //globalmodules -PSPath iis:).collection
    $modules | foreach {if ($_.name -eq "cgiModule") { $_.attributes | select name, value}}
    

    Case7: Change an attribute value for a specific module

    Get-Webconfigurationproperty '//globalmodules/add[@name="CgiModule"]' -name image -PSPath iis:
    Set-Webconfigurationproperty '//globalmodules/add[@name="CgiModule"]' -name image -value %windir%System32inetsrvcgi.dll -PSPath iis:
    

    Related UI Task:UI Feature: "Modules" page

  34. [IIS] Configure Module elements and properties

    Case1: Enable/Disable a native modue

    Add-WebConfigurationProperty //modules -name collection -value @{name='testmodule';lockItem='true'}  -at 0 -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    Enable-WebModule -Name testModule
    

    Case2: Add a new managedModule

    Add-WebConfigurationProperty //modules -name collection -value @{name='newManagedModule';type='Microsoft.IIS.DemoModule'}  -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    New-Managedwebmodule -name newManagedModule -Type Microsoft.IIS.DemoModule
    

    Case3: Disable module by removing the module element from the <modules> section

    Remove-WebConfigurationProperty //modules -name collection -at @{name='testmodule';lockItem='true'}  -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    Disable-WebModule -Name testModule
    

    Case4: List all of enabled modules from 'server' level

    (get-webconfiguration //modules -PSPath iis:).collection -PSPath iis:
    

    Or, you can use other task-based  cmdlet(s) instead:

    Get-WebModule -PSPath iis: -enabled
    

    Case5: Get the attributes for a specific module

    $modules=(get-webconfiguration //modules -PSPath iis:).collection
    $modules | foreach {if ($_.name -eq "cgiModule") { $_.attributes | select name, value}}
    

    Case6: Change an attribute value for a specific module

    Get-Webconfigurationproperty '//modules/add[@name="CgiModule"]' -name lockItem -PSPath iis:
    Set-Webconfigurationproperty '//modules/add[@name="CgiModule"]' -name lockItem -value true -PSPath iis:
    

    Related UI Task:UI Feature:"Modules" page

  35. [IIS] Change order Module elements and Revert To Inherit for a site level

    Case1: Move testmodule to bottom index

    # remove the target item and then re-create the item
    Remove-WebConfigurationProperty //modules -name collection -at @{name='testmodule';lockItem='true'}  -PSPath iis:
    
    Add-WebConfigurationProperty //modules -name collection -value @{name='testmodule';lockItem='true'}  -PSPath iis:
    

    Case2: Revert To Inherit for 'site' level

    Clear-WebConfiguration //modules -name -PSPath 'iis:sitesdefault web site'
    

    Related UI Task:UI Feature:"Modules" page

  36. [IIS] Get the list of worker processes and requests which is running on an Application Pool
    get-webrequest -Process 3644 -AppPool defaultapppool
    
    ### Get the process information of DefaultAppPool
    PS IIS:AppPoolsDefaultAppPoolWorkerProcesses> dir 
    Process  State      Handles  Start TimeId
    -------- -----      -------  ----------
    3644     Running    310      7/24/2008 4:23:22 PM 
    ### Call Get-WebRequest to get the list of requests using the process informationPS 
    IIS:AppPoolsDefaultAppPoolWorkerProcesses> get-webrequest -Process 3644 -AppPool defaultapppool  requestId    : fe00000080000466connectionId : fe00000060000463verb         : GETurl          : /long.aspxsiteId       : 1 
    ### Or, you can use GetRequsts() method:PS 
    IIS:AppPoolsDefaultAppPoolWorkerProcesses> (get-item 3644).getrequests($null)  requestId    : fe00000080000469connectionId : fe00000060000463verb         : GETurl          : /long.aspxsiteId       : 1
    

    Related UI Task:UI Feature: "Worker Processes" page

No Comments