首页
登录 | 注册

powershell创建iis站点、应用程序及应用程序池

之前工作用到的,还有一点需要优化的地方

try
{
    Import-Module WebAdministration -ErrorAction Stop
}catch [System.SystemException]
{
    Write-Host -foregroundColor "Red" "请先安装IIS管理脚本和工具:"
    Write-Host -foregroundColor "Red" "Win2008 *,角色-->添加角色--->功能工具下面的'IIS管理脚本和工具'"
    Write-Host -foregroundColor "Red" "Win7 在卸载程序中,点击'打开或关闭Windows功能'"
    break
}

function CreateWebSite([string]$siteName,[string]$physicalPath,[string]$ports)
{
    if(GetSite $siteName)
    {
        #todo: 待优化
        Write-Host "站点已经存在"
        return
    }
    $bindings = CheckBindingInfo $ports
    try
    {
        $site = New-Item IIS:\Sites\$siteName -bindings $bindings -physicalPath $physicalPath -ErrorAction Stop
        #todo: 待优化        
        $site.enabledProtocols = "http,net.tcp"
    }catch [System.SystemException]
    {
        Write-Host "创建站点失败"
        break
    }
    #todo: 待优化
    CreateAppPool $siteName
    Set-ItemProperty IIS:\Sites\$siteName -name applicationPool -value $siteName
    return $site
}

function CreateApplication([string]$siteName,[string]$appName,[string]$appPhysPath)
{
    #todo: 待优化
    if(GetApplication $siteName $appName)
    {
        Write-Host "应用程序已经存在"
        return
    }
    if(GetSite $siteName)
    {
        $app = New-Item IIS:\Sites\$siteName\$appName  -physicalPath $appPhysPath -type Application
        $site = Get-Item "IIS:\Sites\$siteName"
        Set-ItemProperty IIS:\Sites\$siteName\$appName -name applicationPool -value $site.applicationPool
        return $app
    }

}


function CheckBindingInfo([string]$ports)
{
    $portList=$ports.split(',')
    $bindA = @{}
    $bindB = @{}
    $portA = $portList[0]
    $portB = $portList[1]
    if($portList.Length -ne 2)
    {    
        Write-Host "格式错误"
        break
    }
    if(![string]::IsNullOrEmpty($portA.trim()))
    {
        $bindA=@{protocol="http";bindingInformation="*:"+$portA+":"}
    }
    
    if(![string]::IsNullOrEmpty($portB.trim()))
    {
        $bindB=@{protocol="net.tcp";bindingInformation=$portB+":"}
    }
    if(($bindA.Count -eq 0) -and !($bindB.Count -eq 0))
    {
        return $bindB
    }
    if(!($bindA.Count -eq 0) -and ($bindB.Count -eq 0))
    {
        return $bindA
    }
    if(!($bindA.Count -eq 0) -and !($bindB.Count -eq 0))
    {
        return $bindA,$bindB
    }    
    return $null
}

function CreateAppPool([string]$appPool,[string]$runtimeVersion="v4.0",[int]$pipelineMode=1)
{
    #待优化
    $apool = New-Item IIS:\AppPools\$appPool
    Set-ItemProperty IIS:\AppPools\$appPool managedRuntimeVersion $runtimeVersion
    #1:Classic or 0:Integrated
    Set-ItemProperty IIS:\AppPools\$appPool managedPipelineMode $pipelineMode
    return $apool
}



function GetSite([string]$siteName)
{
    try
    {
        $site = Get-Item "IIS:\Sites\$siteName" -ErrorAction Stop
        return $site
    }catch [System.SystemException]
    {
        #Write-Host -foregroundColor "Red" "获取站点 $siteName 信息失败"
        return $null
    }
}

function GetApplication([string]$siteName,[string]$appName)
{
    if(GetSite $siteName)
    {
    try
    {
        $app = Get-Item "IIS:\Sites\$siteName\$appName" -ErrorAction Stop
        return $app
    }catch [System.SystemException]
    {
        #Write-Host -foregroundColor "Red" "获取应用程序 $appName 失败"
        return $null
    }
    }
}


function Pause
{
    Write-Host "Press any key to continue ..."
    [Console]::ReadKey($true)|Out-Null
    Write-Host
}try
{
    Import-Module WebAdministration -ErrorAction Stop
}catch [System.SystemException]
{
    Write-Host -foregroundColor "Red" "请先安装IIS管理脚本和工具:"
    Write-Host -foregroundColor "Red" "Win2008 *,角色-->添加角色--->功能工具下面的'IIS管理脚本和工具'"
    Write-Host -foregroundColor "Red" "Win7 在卸载程序中,点击'打开或关闭Windows功能'"
    break
}

function CreateWebSite([string]$siteName,[string]$physicalPath,[string]$ports)
{
    if(GetSite $siteName)
    {
        #todo: 待优化
        Write-Host "站点已经存在"
        return
    }
    $bindings = CheckBindingInfo $ports
    try
    {
        $site = New-Item IIS:\Sites\$siteName -bindings $bindings -physicalPath $physicalPath -ErrorAction Stop
        #todo: 待优化        
        $site.enabledProtocols = "http,net.tcp"
    }catch [System.SystemException]
    {
        Write-Host "创建站点失败"
        break
    }
    #todo: 待优化
    CreateAppPool $siteName
    Set-ItemProperty IIS:\Sites\$siteName -name applicationPool -value $siteName
    return $site
}

function CreateApplication([string]$siteName,[string]$appName,[string]$appPhysPath)
{
    #todo: 待优化
    if(GetApplication $siteName $appName)
    {
        Write-Host "应用程序已经存在"
        return
    }
    if(GetSite $siteName)
    {
        $app = New-Item IIS:\Sites\$siteName\$appName  -physicalPath $appPhysPath -type Application
        $site = Get-Item "IIS:\Sites\$siteName"
        Set-ItemProperty IIS:\Sites\$siteName\$appName -name applicationPool -value $site.applicationPool
        return $app
    }

}


function CheckBindingInfo([string]$ports)
{
    $portList=$ports.split(',')
    $bindA = @{}
    $bindB = @{}
    $portA = $portList[0]
    $portB = $portList[1]
    if($portList.Length -ne 2)
    {    
        Write-Host "格式错误"
        break
    }
    if(![string]::IsNullOrEmpty($portA.trim()))
    {
        $bindA=@{protocol="http";bindingInformation="*:"+$portA+":"}
    }
    
    if(![string]::IsNullOrEmpty($portB.trim()))
    {
        $bindB=@{protocol="net.tcp";bindingInformation=$portB+":"}
    }
    if(($bindA.Count -eq 0) -and !($bindB.Count -eq 0))
    {
        return $bindB
    }
    if(!($bindA.Count -eq 0) -and ($bindB.Count -eq 0))
    {
        return $bindA
    }
    if(!($bindA.Count -eq 0) -and !($bindB.Count -eq 0))
    {
        return $bindA,$bindB
    }    
    return $null
}

function CreateAppPool([string]$appPool,[string]$runtimeVersion="v4.0",[int]$pipelineMode=1)
{
    #待优化
    $apool = New-Item IIS:\AppPools\$appPool
    Set-ItemProperty IIS:\AppPools\$appPool managedRuntimeVersion $runtimeVersion
    #1:Classic or 0:Integrated
    Set-ItemProperty IIS:\AppPools\$appPool managedPipelineMode $pipelineMode
    return $apool
}



function GetSite([string]$siteName)
{
    try
    {
        $site = Get-Item "IIS:\Sites\$siteName" -ErrorAction Stop
        return $site
    }catch [System.SystemException]
    {
        #Write-Host -foregroundColor "Red" "获取站点 $siteName 信息失败"
        return $null
    }
}

function GetApplication([string]$siteName,[string]$appName)
{
    if(GetSite $siteName)
    {
    try
    {
        $app = Get-Item "IIS:\Sites\$siteName\$appName" -ErrorAction Stop
        return $app
    }catch [System.SystemException]
    {
        #Write-Host -foregroundColor "Red" "获取应用程序 $appName 失败"
        return $null
    }
    }
}


function Pause
{
    Write-Host "Press any key to continue ..."
    [Console]::ReadKey($true)|Out-Null
    Write-Host
}

用的时候
CreateWebSite "sitename" "C:sitepath" "8094,4506"
CreateApplication "sitename" "site_app_name" "app_path"


相关文章

  • 像数据科学家一样思考:12步指南(下)
    第三阶段-完成 一旦产品构建完成,你仍然需要做一些事情来使项目更加成功并使你的未来生活更轻松.那么我们如何完成数据科学项目呢? 10-交付产品 完成阶段的第一步是产品交付.为了创建可以交付给客户的有效产品,首先必须了解客户的观点.其次,你需 ...
  • 简单的SSM-Shiro安全框架搭建
    首先需要导jar包! 配置你自己的web.xml CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 f ...
  • 字符串: 字符串用单引号(')或双引号(")括起来,不可变 1,find通过元素找索引,可切片,找不到返回-1 2,index,找不到报错. 3,split 由字符串分割成列表,默认按空格. 4,captalize 首字母大写,其 ...
  • JDBC----学习(1)----基础知识
    1   DBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC. 2  JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统.通用的SQL数据库存取和操作的公共接口 ...
  • 前端基础---JS基础
    背景介绍 Javascript 是一种运行在客户端的脚本语言 应用场景: 1.网页特效 2.服务端开发(Node.js) 3.命令行工具(Node.js) 4.桌面程序(Elextron) 5.APP(Cordova) 6.控制硬件-物联网 ...
  • 阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?
    轻松筹首创了"大病救助"模式,帮助了众多病患在第一时间解決了医疗资金等问题,为了从源头解决了医疗资金问题.而在轻松筹这样全球5.5亿用户信赖的大病筹款平台的背后,是日益增长的各种数据.面对这样数据量所造成的巨大挑战,阿里 ...

2019 jeepshoe.net webmaster#jeepshoe.net
13 q. 0.346 s.
京ICP备10005923号