Hello everyone, this is the second post of the series. .

 

Background

===============

In my environment, I have 15 Windows hosts. I need to configure them from the OS installation to configure fail over cluster and then create and run VMs on them. Without scripting, manually complete related tasks would be very bored and easy to make mistakes. I started using PowerShell and it really helped ease the pain.

Now, let's take a look at the second script that you will love to use.

 

What can this one do

===============

I have 15 hosts recently joined domain, and I want all of them to join a fail over cluster. The first thing I am facing is to install hyper-v and fail over cluster feature on all these 15 hosts.

Installing Hyper-V feature requires to restart the host.

This script will help you install these two features on all the hosts remotely, avoiding constantly check if the server is back online. Everything in one click!

 

Logic Intro

===============

First, the script will turn off the windows firewall on target host.

Second, you will see whether hyper-v feature is already installed. If did, continue. If not, hyper-v feature will be installed.

Hyper-V feature installation requires server restart. The script will restart the host and keep trying to contact the target server until it gets back online.

Third, check if fail over cluster feature needs to be installed.

Finally, list these two features status on this server.

All above steps will be repeated for another server.

 

Script is here

===============

PowerShell

#

#Functions defined here

#

function autoinstall-hypervfailoverfeatures ($ComputerName)

{

    #Turnoff windows firewall, or Test-Connection will fail

    Get-NetFirewallProfile -CimSession $ComputerName | Set-NetFirewallProfile -Enabled False

    Get-WindowsFeature -Name Failover-Clustering -ComputerName $ComputerName

    Get-WindowsFeature -Name hyper-v -ComputerName $ComputerName

    #Verify features and install them

    $hypervFeature = Get-WindowsFeature -Name Hyper-V -ComputerName $ComputerName

    if($hypervFeature.Installed)

    {

        Write-Host "Hyper-V installed already on $ComputerName."

    }

    else

    {

        Write-Host "Installing Hyper-V feature on $ComputerName."

        Install-WindowsFeature –Name Hyper-V -ComputerName $ComputerName -IncludeManagementTools -Restart

    }

    #Wait for restart command to take effect, or fail over cluster feature will start installing, failing the whole thing.

    Start-Sleep -s 10

    $count = 1

    While (!(Test-Connection -Cn $ComputerName -BufferSize 16 -Count 1 -Quiet))

    {

        $count++

        $totalseconds = $count * 5

        Write-Host "$ComputerName did not response to ping command."

        Write-Host "Waited $totalseconds seconds. Wait for another 5 seconds, will try again."

        Start-Sleep -s 5

    }

    Write-host "Server is now alive. Proceed......"

    $failoverclusterFeature = Get-WindowsFeature -Name Failover-Clustering -ComputerName $ComputerName

    if($failoverclusterFeature.Installed)

    {

        Write-Host "Failover cluster installed already on $ComputerName."

    }

    else

    {

        Write-Host "Installing Failover cluster feature on $ComputerName"

        Install-WindowsFeature –Name Failover-Clustering -ComputerName $ComputerName -IncludeManagementTools -Restart

    }

    Write-Host "Features status shown below:"

    Get-WindowsFeature -Name Failover-Clustering -ComputerName $ComputerName

    Get-WindowsFeature -Name hyper-v -ComputerName $ComputerName

}

function AutoInstall-HypverVFailoverFeatures-Exec

{

     param ([string[]]$computernames)

     foreach  ($computer in $computernames)

     {

        autoinstall-hypervfailoverfeatures($computer)

     }

}

#

#List all the server you want to install Hyper-V and Failover cluster

#

AutoInstall-HypverVFailoverFeatures-Exec host9,host10

 

At last

===============

Wensheng and I worked together on this script.

Thank you, Wensheng.

 

24th Nov Update

===============

Wensheng wrote a shorter version, here it is.

Note this is a workflow of PowerShell, and it is parallel, meaning all the hosts operates at the same time! And he used Restart-Computer cmdlet as an alternative to keep pinging target computer. A lot better.

Usage:

PowerShell

 workflow AutoInstall-HypverVFailoverFeatures-Exec

{

    param ([string[]]$computernames)

    foreach ($computer in $computernames)

    {   

        #Turnoff windows firewall

        "Turning off windows firewall on $computer."

        Get-NetFirewallProfile -CimSession $computer | Set-NetFirewallProfile -Enabled False

        #show cluster and hyper-v feature status

        "Showing features status on $computer."

        Get-WindowsFeature -Name Failover-Clustering,hyper-v -ComputerName $computer

    }

    foreach -parallel ($computer in $computernames)

    {

        #Verify features and install them

        $hypervFeature = Get-WindowsFeature -Name Hyper-V -ComputerName $computer

        if($hypervFeature.Installed)

        {

            "Hyper-V installed already on $computer."

        }

        else

        {

            "Installing Hyper-V feature on $computer."

            Install-WindowsFeature –Name Hyper-V -ComputerName $computer -IncludeManagementTools

            Restart-Computer -Wait -PSComputerName $computer -Force

        }

        $failoverclusterFeature = Get-WindowsFeature -Name Failover-Clustering -ComputerName $computer

        if($failoverclusterFeature.Installed)

        {

            "Failover cluster installed already on $computer."

        }

        else

        {

            "Installing Failover cluster feature on $computer"

            Install-WindowsFeature –Name Failover-Clustering -ComputerName $computer -IncludeManagementTools

        }

    }

    foreach  ($computer in $computernames)

    {

        "$computer Current features status shown below:"

        Get-WindowsFeature -Name Failover-Clustering,hyper-v -ComputerName $computer

    }

}
 

Happy Powershelling, everybody.

[PowerShell Utils] Remotely install Hyper-V and Failover Cluster feature on a list of windows 2012 servers的更多相关文章

  1. What is a Microsoft Failover Cluster Virtual Adapter

    What is a Microsoft Failover Cluster Virtual Adapter anyway? A question often asked is, "What i ...

  2. Hyper V NAT 网络设置 固定IP / DHCP

    Hyper V 默认的Default Switch同时支持了NAT网络以及DHCP,虚拟机能够访问外网. 但使用过程中发现这个IP网段经常变化,而且Hyper V没有提供管理其NAT网络与DHCP的图 ...

  3. windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理

    windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理 今天在dell r710 上用windows server 2008 r2企业版hyper v 做虚拟化,添 ...

  4. 设置Hyper V

    1.打开服务器管理器 2.添加角色和功能 3.安装类型 -> 基于角色或基于功能的安装 4.服务器选择 -> 下一步 5.服务器角色 勾选"Hyper V"

  5. bundle install 出现 'gem install mysql2 -v '0.3.15' succeeds before bunding '

    bundle install 出现  'gem install mysql2 -v '0.3.15' succeeds before bunding ' 解决:sudo apt-get install ...

  6. HYPER -V 独立安装的 2016版本 中文版 下载好慢啊

    HYPER -V 独立安装的 2016版本 中文版 下载好慢啊

  7. Powershell script to install Windows Updates (msu) from folder

    ######################################################### # # Name: InstallWindowsUpdates.ps1 # Auth ...

  8. [PowerShell Utils] Create a list of virtual machines based on configuration read from a CSV file in Hyper-V

    Hello everyone, this is the third post of the series. .   Background =============== In my solution, ...

  9. windows rails new demo时候出错Make sure that `gem install mysql2 -v '0.3.15'` succeeds before bundling.

    rails new demo --database=mysql最后报错Gem files will remain installed in D:/BillFiles/rails_dev/Ruby193 ...

随机推荐

  1. SQL Server密码爆破工具SQLdict

    SQL Server密码爆破工具SQLdict SQL Server是Windows系统常用的数据库服务器.它广泛采用用户名和密码方式,进行身份认证.Kali Linux提供一款专用的数据库密码爆破工 ...

  2. hdu 3853 概率dp

    题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...

  3. ios优秀的第三方框架

    1.数据请求,object-c  AFNetworking 网址:https://github.com/AFNetworking/AFNetworking swift   Alamofire 网址:h ...

  4. PHP常用设计模式

    1.单例模式指在整个应用中只有一个对象实例的设计模式 class Single { public $rand; static private $instance; // 类直接调用 final pri ...

  5. RabbitMQ简单使用

    环境搭建: RabitMQ是用Elang编写的,虽然Elang本身是跨平台的,但也同时意味着搭建Rabit环境需要首先配置Elang环境.配置RabitMQ的网上教程还比较多的: windows 下 ...

  6. Webpack 性能优化 (一)(使用别名做重定向)

    前言 Webpack 是 OneAPM 前端技术栈中非常重要的一部分.它非常好用,假设你还不了解它,建议你阅读这篇Webpack 入门指迷,在 OneAPM 我们用它完毕静态资源打包.ES6 代码的转 ...

  7. 《Go语言实战》摘录:6.1 并发 - 并行 与 并发

    6.1 并行 与 并发

  8. C#写UTF8文件时指定是否含BOM头

    BOM的基本概念 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实 ...

  9. Java知识回顾 (2) Java 修饰符

    一.Java 修饰符 1.1 访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default (即缺省,什么也不写): 在 ...

  10. java数据结构 栈stack

    栈(Stack) 栈(Stack)实现了一个后进先出(LIFO)的数据结构. 你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部. 当你从栈中取元素的时候,就从栈顶 ...