Jimenemex
Jimenemex

Reputation: 3166

Get all the names of the applications in a site

I am trying to write a powershell script which gets the names of each application in a website in IIS in order to change the app pool associated with it. I am able to get the website, but I don't see a clear way to fetch each of the names?

Eg. I want to loop through them all: Api, Services, etc.. and then use

Set-ItemProperty "IIS:\Sites\RootSite\$loopedValue" -Name 'applicationPool' -Value $NewPool

I'm trying this:

Get-WebApplication -Site 'ABC'

Name             Application pool   Protocols    Physical Path                                                                                                        
----             ----------------   ---------    -------------                                                                                                        
Api              ABC                http         C:\Api
Services         ABC                http         C:\Services
Director         ABC                http         C:\Director
ReportingServer  ABC                http         C:\ReportingServer

But there is no way to get the Name from the members of Get-WebApplication.

Get-WebApplication | Get-Member


   TypeName: Microsoft.IIs.PowerShell.Framework.ConfigurationElement#site#application

Name                     MemberType            Definition                                                                                                             
----                     ----------            ----------                                                                                                             
ClearLocalData           Method                void ClearLocalData()                                                                                                  
Copy                     Method                void Copy(Microsoft.IIs.PowerShell.Framework.ConfigurationElement target, bool recurse)                                
Delete                   Method                void Delete()                                                                                                          
Equals                   Method                bool Equals(System.Object obj), bool IEquatable[ConfigurationElement].Equals(Microsoft.IIs.PowerShell.Framework.Conf...
GetAttribute             Method                Microsoft.IIs.PowerShell.Framework.ConfigurationAttribute GetAttribute(string attributeName)                           
GetAttributeValue        Method                System.Object GetAttributeValue(string attributeName)                                                                  
GetChildElement          Method                Microsoft.IIs.PowerShell.Framework.ConfigurationElement GetChildElement(string elementName), Microsoft.IIs.PowerShel...
GetCollection            Method                Microsoft.IIs.PowerShell.Framework.ConfigurationElementCollection GetCollection(string collectionName), Microsoft.II...
GetHashCode              Method                int GetHashCode()                                                                                                      
GetMetadata              Method                System.Object GetMetadata(string metadataType)                                                                         
GetParentElement         Method                Microsoft.IIs.PowerShell.Framework.ConfigurationElement GetParentElement()                                             
GetType                  Method                type GetType()                                                                                                         
LoadProperties           Method                void LoadProperties(System.Collections.Generic.Dictionary[string,System.Object] propCollection)                        
SetAttributeValue        Method                void SetAttributeValue(string attributeName, System.Object value)                                                      
SetMetadata              Method                void SetMetadata(string metadataType, System.Object value)                                                             
ToPSObject               Method                psobject ToPSObject(Microsoft.IIs.PowerShell.Framework.ConfigurationElement parent)                                    
ToString                 Method                string ToString()                                                                                                      
Update                   Method                void Update(Microsoft.IIs.PowerShell.Framework.ConfigurationElement source), bool Update(psobject data)                
UpdateCollection         Method                bool UpdateCollection(psobject[] arr)                                                                                  
applicationPool          NoteProperty          string applicationPool=ABC                                                                                           
Collection               NoteProperty          psobject[] Collection=System.Management.Automation.PSObject[]                                                          
ConfigurationPathType    NoteProperty          ConfigurationPathNodeType ConfigurationPathType=Location                                                               
enabledProtocols         NoteProperty          string enabledProtocols=http                                                                                           
ItemXPath                NoteProperty          string ItemXPath=/system.applicationHost/sites/site[@name='ABC' and @id='1']/application[@path='/API']            
Location                 NoteProperty          string Location=                                                                                                       
path                     NoteProperty          string path=/ApiDoc                                                                                                    
preloadEnabled           NoteProperty          bool preloadEnabled=False                                                                                              
PSPath                   NoteProperty          string PSPath=MACHINE/WEBROOT/APPHOST                                                                                  
serviceAutoStartEnabled  NoteProperty          bool serviceAutoStartEnabled=False                                                                                     
serviceAutoStartProvider NoteProperty          string serviceAutoStartProvider=                                                                                       
virtualDirectoryDefaults NoteProperty          Microsoft.IIs.PowerShell.Framework.ConfigurationElement#application#virtualDirectoryDefaults virtualDirectoryDefault...
Item                     ParameterizedProperty System.Object Item(string attributeName) {get;set;}                                                                    
Attributes               Property              Microsoft.IIs.PowerShell.Framework.ConfigurationAttributeCollection Attributes {get;}                                  
ChildElements            Property              Microsoft.IIs.PowerShell.Framework.ConfigurationChildElementCollection ChildElements {get;}                            
ElementTagName           Property              string ElementTagName {get;}                                                                                           
Methods                  Property              Microsoft.IIs.PowerShell.Framework.ConfigurationMethodCollection Methods {get;}                                        
Schema                   Property              Microsoft.IIs.PowerShell.Framework.ConfigurationElementSchema Schema {get;}                                            
PhysicalPath             ScriptProperty        System.Object PhysicalPath {get=$pquery = $this.ItemXPath + "/virtualDirectory[@path='/']/@physicalPath"...

I don't really want to parse a string value from the path or PhysicalPath to do this. Is there another way?

Upvotes: 1

Views: 4575

Answers (2)

JeanKininho
JeanKininho

Reputation: 89

An alternative way I came up with was to join the two results from Get-WebSite and Get-WebApplication

(get-website | select-object @{n='Site'; e={$_.Name}},@{n='Location'; e={$_.PhysicalPath}}) + (get-webapplication | select-object @{n='Site'; e= {$_.GetParentElement().Attributes['name'].value + $_.path }},@{n='Location'; e= {$_.PhysicalPath}})

Output:

Site                          WebType        Location
----                          -------        --------
MEDIA                         WebSite        c:\mir\data
DATA                          WebSite        d:\data
Tu***.M*.A***o.Sa****x.N***e  WebSite        C:\WebSite\Tu***.M*.A***o.Sa****x.N***e
Tu***.***********on.*****ime  WebSite        C:\WebSite\Tu***.***********on.*****ime
Tu***.**.*****.***********ion WebSite        C:\WebSite\Tu***.**.*****.***********ion
Tu***.********.**.****App     WebSite        C:\WEB\Tu***.********.**.****App
Tu***.********.**.****App/api WebApplication C:\Web\Tu***.********.**.****vate

Upvotes: 2

AdminOfThings
AdminOfThings

Reputation: 25001

The following will provide the application names for all sites:

(Get-ChildItem -Path 'IIS:\Sites' -Recurse | Where-Object {$_.NodeType -eq 'application'}).Name

The following will return the application names for Default Web Site:

(Get-ChildItem -Path 'IIS:\Sites\Default Web Site' | Where-Object {$_.NodeType -eq 'application'}).Name

Upvotes: 0

Related Questions