The Powershell reads the sample json file and setup your website based on information in json file..
#Powershell to create web site host from metadata
function Get-Service-Name
{
param(
[parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[object] $component
)
function Get-Service-Name
{
param(
[parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[object] $component
)
return [System.IO.Path]::GetFileNameWithoutExtension($component.solutionPath)
}
function Get-WebHost-Descriptor
{
param(
[parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[object] $component
)
$webDescription = $component.hostDescription;
return $webDescription ;
}
function Create-WebHost
{
param(
[parameter(Mandatory=$false)]
[Object] $component,
[bool] $recreateHost = $false
)
process
{
$webDescription = Get-WebHost-Descriptor $component
$websitePath = "IIS:Sites$($webDescription.Name)";
if ($webDescription.appPool)
{
$webAppPoolPath = "IIS:AppPools$($webDescription.appPool.Name)"
}
if ($recreateHost)
{
if (Test-Path $websitePath -PathType Container)
{
Write-Verbose "Removing site $($webDescription.Name)"
Remove-Item $websitePath -Confirm:$false -Force -Recurse
if ($webAppPoolPath)
{
Write-Verbose "Removing appPool $($webDescription.appPool.Name)"
Remove-Item $webAppPoolPath -Confirm:$false -Force -Recurse
}
}
}
if ($webAppPoolPath -and -Not (Test-Path $webAppPoolPath -PathType Container))
{
Write-Verbose "Creating app pool $($webDescription.appPool.Name)"
$appPool = New-Item $webAppPoolPath
$appPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value "v4.0"
if ($webDescription.appPool.User)
{
Write-Verbose "Setting app pool $($webDescription.appPool.Name) identity"
$appPool.processModel.userName = $webDescription.appPool.User;
$appPool.processModel.password = $webDescription.appPool.Password;
$appPool.processModel.identityType = 3;
$appPool | Set-Item
$appPool.Stop();
$appPool.Start();
}
}
if (-Not (Test-Path $websitePath -PathType Container))
{
New-Item -ItemType Directory -Force -Path $webDescription.PhisicalPath > $null
$bindings =$webDescription.Protocols | % {$i=0}{ @{protocol=$_;bindingInformation="$($webDescription.BindingInformations[$i++])"}} | ? {-Not [string]::IsNullOrWhiteSpace($_.bindingInformation)}
Write-Verbose "Creating web site $($webDescription.Name)"
New-Website -Name $webDescription.Name -Port $bindings[0].bindingInformation.Replace(":","") -PhysicalPath $webDescription.PhisicalPath > $null
#$a = New-Item $websitePath -bindings ($b) -physicalPath $webDescription.PhisicalPath
$bindings | Select -skip 1 | % {New-ItemProperty -path $websitePath -name bindings -value @{protocol=$_.protocol.ToString();bindingInformation=$_.bindingInformation.ToString()}}
#$bindings | Select -skip 1 | % {New-WebBinding -Name $webDescription.Name -IPAddress "*" -Port $_.bindingInformation.Replace(":","").Replace("*","") -Protocol $_.protocol > $null}
Set-ItemProperty $websitePath -name EnabledProtocols -Value (($webDescription.Protocols | select -uniq) -join ',')
if ($webAppPoolPath)
{
Set-ItemProperty $websitePath -Name "applicationPool" -Value $webDescription.appPool.Name
}
}
$webAppPath = "$websitePath$(Get-Service-Name $component)"
if (-Not (Test-Path $webAppPath -PathType Container))
{
Write-Verbose "Creating web app $webAppPath"
New-Item $webAppPath -physicalPath $webDescription.PhisicalPath -type Application > $null
if ($webDescription.Protocols -and $webDescription.Protocols.Count -gt 0)
{
$protocols = (($webDescription.Protocols | select -uniq) -join ',')
Write-Verbose "Setting EnabledProtocols on WebApp $protocols"
Set-ItemProperty $webAppPath -name enabledProtocols -Value (($webDescription.Protocols | select -uniq) -join ',')
if ($webAppPoolPath)
{
Set-ItemProperty $webAppPath -Name "applicationPool" -Value $webDescription.appPool.Name
}
}
}
return @{Name=$webDescription.Name}
}
}
# Example to create web site from json defination
[string] $json = '[
{
"type": "Web",
"hostDescription": {
"BindingInformations": [":323:", "3808:*"],
"Name": "YourWebsiteName",
"Protocols": ["http", "net.tcp"],
"PhisicalPath": "c:\inetpub\wwwroot\",
"solutionPath": "YourWebDirectoryName",
"appPool": {
"Name": "YourAppPoolName",
"User": "AccountForAppPool",
"Password": "PasswordForAppPool"
}
}
}
]'
$components = ($json | ConvertFrom-Json)
$firstWebSite = $components[0];
Write-Host $firstWebSite
Create-WebHost $firstWebSite , $true

Leave a comment