Windows Server 2008 R2 PowerShell自动部署IIS站点的代码详解

发布时间 - 2017-06-05 00:00:00    点击率:

1、功能描述

  1. 连接软件源服务器下载.NET Framework 4.0、.NET Framework 4.5。

  2. 检测并判断当前.NET Framework版本是否小于v4.0,如果小于则进行升级。

  3. 安装IIS组件,安装完成后删除软件及脚本。

  在升级.NET Framework时,是先从3.5升级(可以通过执行命令"Add-WindowsFeature As-Net-Framework"直接安装3.5),然后依次升级4.0、4.5。

2、实现

  源码如下:

# eastmoney public tools# version: v1.0.2# create by XuHoo, 2016-9-27#try {
    Import-Module ServerManager -ErrorAction Stop
    Import-Module BitsTransfer -ErrorAction Stop
}
catch {
    Write-Warning "$_"; exit
}$packages_path = "D:\software"  # Packages storage directoryfunction Download() {    $isExists = Test-Path $packages_path
    if(!$isExists) {
        New-Item -ItemType Directory $packages_path
    }    # instantiate a socket object,
    # Try connect to download the source
    $testConn = New-Object Net.Sockets.TcpClient    $testConn.Connect("$address", 80)  # $address need to custom
    if($testConn) {
        Start-BitsTransfer $address/dotnet4.0.exe $packages_path
        Start-BitsTransfer $address/dotnet4.5.exe $packages_path
        return $true
    } else {        return $false
    }
}function CheckVersion {    # To detect the .NET Framework whether exists in the registry
    $isExists = Test-Path "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\"
    if(!$isExists) {        return $false
    } else {        # Returns the current .NET Framework version
        $version = gci "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP" | sort pschildname -desc | select -fi 1 -exp pschildname        return $version
    }
}function Update {
    Add-WindowsFeature As-Net-Framework  # Update .NET Framework 3.5
    # The first cycle:
    #   Perfrom CheckVersion function, returns the value assigned to $response
    #   If $response < 4.0, start install dotnet 4.0 and dotnet 4.5
    #   Enter the second loop
    # The second cycle:
    #   Again to perfrom CheckVersion function
    #   If the installation is successful,
    #   the value of variable $response at this time will be greater than 4.0,
    #   the output corrent .NET Framework version and returns $true
    for($i=0;$i -lt 2;$i++) {        $response = CheckVersion        if($response -lt "v4.0") {
            Start-Process -Wait $packages_path\dotnet4.0.exe -ArgumentList "/quiet"
            Start-Process -Wait $packages_path\dotnet4.5.exe -ArgumentList "/quiet"
        } else {
            Write-Host "DotNET current version is: $response"
            return $true
        }
    }    # Above cycle without entering the return statement,
    # then .NET Framework update failed, this function will return the $false
    return $false}function Install {    $features = Get-WindowsFeature Web-Server,Web-Static-Content,Web-Default-Doc,Web-Http-Errors,Web-Http-Redirect,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Http-Logging,Web-Request-Monitor,Web-Filtering,Web-IP-Security,Web-Stat-Compression,Web-Mgmt-Console,Web-WHC    # Install IIS features
    foreach($item in $features) {
        Add-WindowsFeature $item
    }
    Remove-WindowsFeature Web-Dir-Browsing  # Delete "Web-Dir-Browsing" function}function Registry {    $is64bit = [IntPtr]::Size -eq 8  # To determine whether a system is 64-bit
    $isapiPath_32 = "$env:windir\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
    Set-Location "$env:windir\Microsoft.NET\Framework\v4.0.30319\"; .\aspnet_regiis.exe -i    if($is64bit) {        $isapiPath_64 = "$env:windir\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
        Set-Location "$env:windir\Microsoft.NET\Framework64\v4.0.30319\"; .\aspnet_regiis.exe -i
    }
}

try {    $chkGet_result = Download    $chkUp_result = Update    if($chkUp_result) {
        Install; Registry
    } else {
        Write-Warning "Update .NET Framework error."
    }
}
catch {
    Write-Warning "$_"; exit
}finally {
    Remove-Item $packages_path -Recurse
    Remove-Item $MyInvocation.MyCommand.Path -Force
}

 


# windows  # 可以通过  # 安装完成后  # address  # Connect  # TcpClient  # Sockets  # exe  # custom  # Start  # Object 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何挑选高效建站主机与优质域名?  Laravel如何使用模型观察者?(Observer代码示例)  Python数据仓库与ETL构建实战_Airflow调度流程详解  MySQL查询结果复制到新表的方法(更新、插入)  Thinkphp 中 distinct 的用法解析  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  用yum安装MySQLdb模块的步骤方法  如何快速重置建站主机并恢复默认配置?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  如何用好域名打造高点击率的自主建站?  移动端脚本框架Hammer.js  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  如何获取PHP WAP自助建站系统源码?  JavaScript数据类型有哪些_如何准确判断一个变量的类型  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  微信小程序 配置文件详细介绍  如何快速搭建高效WAP手机网站吸引移动用户?  北京的网站制作公司有哪些,哪个视频网站最好?  EditPlus中的正则表达式 实战(1)  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  七夕网站制作视频,七夕大促活动怎么报名?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何用y主机助手快速搭建网站?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何构建满足综合性能需求的优质建站方案?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Java解压缩zip - 解压缩多个文件或文件夹实例  JavaScript如何实现路由_前端路由原理是什么  android nfc常用标签读取总结  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  免费网站制作appp,免费制作app哪个平台好?  利用JavaScript实现拖拽改变元素大小  如何用花生壳三步快速搭建专属网站?  EditPlus 正则表达式 实战(3)  java获取注册ip实例  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?