今天早上接了个邮件,需要在所有的windows 2008R2的服务器上都安装 .net 4.5和 WMF4( PowerShell 4.0)。

豆子做了些研究,觉得需要做到以下几点

  1. 扫描所有的windows 2008 R2服务器,能够查看4.5和Powershell的当前版本是什么;

  2. 如果需要安装,必须以先安装.net 4.5, 然后安装WMF4的顺序进行,不然会出现安装显示正常,但是WMF4并未完全安装的问题。

  3. 安装的方式,可以采用MSI+MST的自定义安装,或者使用开机/关机的脚本执行,或者通过powrshell或者psexec 的远程命令直接安装

第一点我可以通过Powershell脚本实现,通过get-adcomputer获取对应的服务器对象,然后对每一个对象进行invoke-command的远程操作,查看注册表和powershell版本即可。

查看.net 的版本和ps的版本

1
2
3
4
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | 
Get-ItemProperty -name Version -EA 0 |
Where-Object $_.PSChildName -match '^(?!S)\p{L}'} | Sort-Object version -Descending | 
Select-Object -ExpandProperty Version -First 1

1
$PSVersionTable.PSVersion.Major

需要注意的一点是,在所有的远程服务器上面,必须启动了winrm的服务,并打开了对应的防火墙接口才能执行invoke-command命令。一个简单的命令是winrm quickconfig 可以自动启动并配置防火墙。考虑到机器比较多,豆子使用的是组策略来统一更改。

具体的配置可以参考

http://blog.powershell.no/2010/03/04/enable-and-configure-windows-powershell-remoting-using-group-policy/

第二点,必须注意的是windows 2008 R2对应的WMF4其实是一个升级补丁,可以通过下面命令查看一下是否真正安装了,否则如果安装顺序不对,这个补丁不会安装的。

1
2
3
4
5
6
7
8
$status=get-hotfixWhere-Object {$_.hotfixid -eq "KB2819745"}
if ($status) {
Write-host " WMF4 is Installed "
}
else
{
Write-host "WMF4 is Not Installed"
}

第三点,具体的安装方式,最开始我打算直接用powershell远程session直接从共享网络上安装就行了,后来发现微软默认的安全机制会禁止这种连续跳转的权限。比如我从机器A上远程控制机器B,然后从机器C的共享里面安装程序是被严厉禁止的,这是为了避免中间人攻击。

可以通过激活credssp的方式执行,参考如下,但是为了避免安全隐患,豆子还是决定放弃

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/14/enable-powershell-quot-second-hop-quot-functionality-with-credssp.aspx

MST+MSI的安装方式比较麻烦,需要用orca修改对应的属性,这里豆子也放弃了,感兴趣的可以参考这个博客

http://www.itninja.com/blog/view/deploy-net-dot-net-4-5-1-via-gpo

最后的选择则是关机脚本

两个脚本

安装.net 4.5

1
2
3
4
5
6
7
8
9
rem script to install .net 4.5
@echo off
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,version=v4.5"
if %errorlevel%==1 goto installnet
if %errorlevel%==0 goto exit
:installnet
start /wait "\\syd02\Syd_Transfer\yli\dotnetfx45_full_setup.exe /ceipconsent /norestart /q"
:exit
exit

安装 WMF4

1
2
3
4
5
6
7
8
9
10
@echo off
pushd %~dp0
echo %CD%
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\powerShellEngine" /f 4.0
if %errorlevel%==1 goto installwmf
if %errorlevel%==0 goto exit
:installwmf
expand -f:* \\syd02\syd_transfer\yli\Windows6.1-KB2819745-x64-MultiPkg.msu %temp%
pkgmgr.exe /n:%temp%\Windows6.1-2819745-x64.xml /norestart /quiet
:exit

把上面的脚本配置成关机脚本,注意安装顺序,重启服务器就会自动安装。

最后给个比较完整的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$a=Get-ADComputer -Filter {operatingsystem -like "*2008 R2*"} -Properties operatingsystem,ipv4address| select name, operatingsystem,ipv4address
foreach($b in $a ){
$ping=Test-Connection -ComputerName $b.Name -Count 1 -Quiet
if($ping){
$b.Name
Invoke-Command -ComputerName $b.name {
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | 
Get-ItemProperty -name Version -EA 0 |
Where-Object $_.PSChildName -match '^(?!S)\p{L}'} | Sort-Object version -Descending | 
Select-Object -ExpandProperty Version -First 1
$PSVersionTable.PSVersion.Major
if($psv -lt 4){
Write-Host "WMF4 is not installed, do you want restart the server to install? y/n"
#\\syd02\Syd_Transfer\yli\WMF4.bat
$install=read-host
switch($install)
"y"
    write-host "The Server is rebooting"
    #Restart-Computer -ComputerName $b.name -Force
    }
  "n"write-host ""}
  default {}
}
}
Write-Host ""
Write-Host "---------------------------------------------"
}
}
}

大概效果如下,第一个是服务器名字,然后输出.net 版本和PS的版本,如果PS低于4,那么询问是否需要重启服务器以便安装。

本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1676947,如需转载请自行联系原作者

GPO 安装 .net 4.5和WMF4相关推荐

  1. Powershell 查看软件是否成功安装

    有的时候,豆子使用GPO安装软件之后,希望查看在客户端是否成功安装,Windows客户端可能有几百上千台,于是豆子写了个简单的程序来进行查看. 思路如下: 传递参数软件名字和操作系统名字,搜索到对应的 ...

  2. GPO - 禁用来宾帐户

    您想了解如何使用组策略禁用来宾用户帐户吗?在本教程中,我们将向您展示如何使用 GPO 在域中的所有计算机上禁用来宾用户帐户. • Windows 2012 R2 • Windows 2016 • Wi ...

  3. 组策略自定义安装Office 2003

    实验环境如下图: 工具:1. microsoft office 2003 resource Kit   ork.exe (http://download.microsoft.com/download/ ...

  4. 如何使用域组策略(AD GPO)分发软件安装以及卸载[1.31.2013更新]

    1.用域管理员帐号登录某一域成员Server,添加Group Policy Management 的Feature . 2.在命令行里面输入GPMC.msc,回车打开Group Policy Mana ...

  5. Windows2003 安装AD失败,未能为域创建GPO,出现了扩展错误 的解决方法

    今天执行DCPROMO安装AD时出现一小问题,具体是在安装时提示无法创建GPO.网上找了不少资料,这篇文章帮我解决了问题,希望以后遇到我一样问题的人同样可以解决问题. 此时打开本地策略提示安全模板的数 ...

  6. 如何使用域组策略(AD GPO)分发软件安装以及卸载

    1.用域管理员帐号登录某一域成员Server,添加Group Policy Management 的Feature . 2.在命令行里面输入GPMC.msc,回车打开Group Policy Mana ...

  7. 通过GPO的方式解决win10系统无法安装语言包

    通过GPO的方式解决win10系统无法安装语言包 最近使用win10系统的用户反应,想安装一个英语美国的语言包,结果基本输入法.手写和语音都不能安装,显示错误代码的故障现象,针对这样的问题该怎么办?如 ...

  8. AD域服务器如何推送消息到客户端,通过域控AD GPO策略推送安装SEP客户端配置步骤...

    通过通过域控域控 AD GPO 策略策略推送推送安装安装 SEP 客户端配置步骤客户端配置步骤 ■ 从SEPM导出SEP安装包 ■ 共享SEP安装包使得客户机可以通过网络共享方法访问 ■ 创建安装SE ...

  9. 打造RIS服务器 软件在局域网中自动安装

    在局域网中,工作站无休止地进行软件安装.升级.维护.删除操作,这些操作对网络管理员来说是庞大的工作量,同时,这些操作也可能产生安全问题.无论在企业,学校,或是网吧,网络管理员都希望有一种软件分发功能来 ...

  10. 2008 R2 辅域安装和卸载(加域、退域及组策略的测试)

    一.辅域安装 1.运行--dcpromo 2.向现有域添加域控制器 3.输入主域域名fdwxyjy.com 4.选择站点(默认即可,此处wuxi是因为在AD中重命名了) 5.辅域安装完后重启,在主域上 ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装python-pyqt5软件包(python 2.7)
  2. PHP也玩并发,巧用curl 并发减少后端访问时间
  3. document对象详解
  4. java 更新ui_你怎么解决Android开发中更新UI报错的异常吗-百度经验
  5. 企业建设什么样的网站才能符合用户?
  6. Shiro集成SpringBoot时出现 not eligible for auto-proxying
  7. Spring配置内置的连接池DriverManagerDataSource
  8. Java中判断字符串是否为数字的五种方法
  9. android开发,设置listview的高度无效
  10. Java 异步回调机制实例解析
  11. Unable to allocate bufptr memory (errval = -1)(CRLF与LF格式转换)问题的解决
  12. Qt中QScrollArea控件区域与滑动条的颜色不一致设置
  13. 5个小众视频素材网站,你知道吗?
  14. 用hundred造句子_冬至暖心短信问候祝福句子,冬至祝福词
  15. 【数字图像处理】图像感兴趣区域与图像放大与缩小
  16. 基础工具组件starter-idempotent-redission设计与实现
  17. android 气泡.9,Android 三种方式实现三角形气泡效果、自定义View、shape、点9图
  18. Excel.Application使用手册(API)
  19. Linux系统调优详解(十二)——IO调优之磁盘测速
  20. uart_ops结构体分析之amba_pl011_pops

热门文章

  1. python terminal_一个简单、易用的Python命令行(terminal)进度条库
  2. Python中的stringIO模块
  3. 5天学python_人生苦短,我将学习Python基本句子(第5天),我学,基础,篇,语句,Day5...
  4. phpstudy mysql配置_phpstudy mysql数据库文件位置在哪
  5. android 监听连接超时,android – Retrofit和OkHttpClient,在失败方法中捕获连接超时
  6. c语言鼠标游戏,c语言写的鼠标操作的五子棋游戏,欢迎观赏!
  7. linux ftp指定下载文件名称,linux中通过FTP下载指定的文件方法linux网页制作 -电脑资料...
  8. php 日之泪,php泪中一帮助
  9. 服务器传输文件损坏,使用ftplib将文件传输到FTP服务器后,文件已损坏
  10. php数组合成函数,PHP合并数组函数array_merge用法分析