GPO 安装 .net 4.5和WMF4

今天早上接了个邮件,需要在所有的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的版本

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

需要注意的一点是,在所有的远程服务器上面,必须启动了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其实是一个升级补丁,可以通过下面命令查看一下是否真正安装了,否则如果安装顺序不对,这个补丁不会安装的。

$status=get-hotfix| Where-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

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

@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

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

最后给个比较完整的脚本

$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,那么询问是否需要重启服务器以便安装。

时间: 2024-07-31 03:57:49

GPO 安装 .net 4.5和WMF4的相关文章

GPO安装程序之后检查是否成功安装

最近用GPO安装了好几个程序,如何判断是否成功安装呢? 有个简单的脚本,比如我判断tightVNC是否在所有的Win7 系统上安装了 $a=Get-ADComputer -Filter{operatingsystem -like "*7*"} -Properties operatingsystem | select name, operatingsystem foreach($b in $a) { if(Test-Connection -ComputerName $b.name -Co

Powershell 查看软件是否成功安装

有的时候,豆子使用GPO安装软件之后,希望查看在客户端是否成功安装,Windows客户端可能有几百上千台,于是豆子写了个简单的程序来进行查看. 思路如下: 传递参数软件名字和操作系统名字,搜索到对应的计算机对象,对于每一个对象创建远程session,如果失败(比如关机或者其他情况),输出失败计算机的名字:对于成功连接的对象,根据32bit或者64bit查询注册表,输出结果. function Get-Software{ [cmdletbinding()] param( [parameter(ma

SCOM 2012知识分享-1:理解代理

Operations Manager"代理"是安装在计算机上的一项服务. 代理会收集数据.将采样数据与预定义的值进行比较.创建警报并运行响应. 管理服务器会接收配置并将配置分发到受监视的计算机上的代理. 所有代理均要向管理组中的一个管理服务器报告. 此管理服务器称为代理的主管理服务器. 代理根据管理服务器发送的配置观察受监视的计算机上的数据源并收集信息. 此代理还计算监视的计算机以及监视的计算机上的对象的运行状况状态,并向管理服务器报告. 监视的对象的运行状况变化或其他条件满足时,代理

Windows Sever 2012的安装教程(图文)

转自脚本之家 Windows Sever 2012的安装教程(图文) 作者:佚名 来源:互联网 最近微软先行放出发布了下一代Windows服务器版本windows server 2012,笔者下载下来测试安装了,相对于windows server 2008,确实有许多细节方面的改进. 我是通过vmware workstation 8来安装windows server 2012的,由于安装的时候无法选择2012只好选择windows server 2008 64位版本的. 启动界面,由前一个版本的

某台计算机允许域用户修改网络配置,但不允许安装和卸载软件

客户要求如下:要求对某台机器允许域用户修改网络配置,但不允许安装和卸载软件.如何实现? ===解决思路 通过组策略实现"不允许安装和卸载软件" 普通账户在域中是无法修改网络配置的,将域用户添加到本地管理员组中,如果不想让其成为本地管理员,也可以将其添加到Network Configuration Operators组中,此组的成员可以修改网络配置,这种方法用户同时需要PowerUser权限,如果没有的话,权限是不够的 客户的域用户默认都有PowerUser权限 ===组策略配置 1)新

利用组策略提升域用户安装exe布置的软件

背景: 利用组策略安装软件有两个格式,分别是MSI和EXE. msi:部署MSI软件是不需要用管理员的权限进行安装的,但是MSI的软件凤毛麟角,都要自己通过封装来把EXE重新打包MSI. exe:部署exe通过写简单的zap脚本来部署,但是有些软件是需要管理员的权限来安装的.所以导致很多exe安装的软件还是需要管理员来安装. 为了解决这个方法,可以利用组策略来提升权限来安装部署的exe软件. 1,在相关的组建立GPO. 2,编辑GPO,打开计算机配置-策略-管理模板-windows组件-wind

MDT2013系列之一 MDT 2013 Update 1安装和部署

环境介绍: 本博文介绍如何使用MicrosoftDeployment Toolkit 2013 Update 1部署Windows 10客户端,实验内容包括安装.配置MDT以及部署Windows 10客户端等内容.MicrosoftDeployment Toolkit 2013 Update 1是一款由微软免费提供的部署Windows 10的工具,您可以通过MicrosoftDeployment Toolkit 2013 Update 1以及WDS在客户端中部署Windows 10.特别提醒,如

AD GPO应用实例

来到一个新的环境,很多东西自己都摸不清,需一步步去调整,管理起来,还好是使用域管理,以下为AD GPO应用的一些实例. 一.打开系统默认共享,很多非原版安装的系统都会进行一些优化修改,如关闭了系统的默认共享,但这给企业里管理是带来十分不便的,而且有时还会引发出种种奇怪的问题,所以建议还是开启系统默认共享,以下为GPO 统一推送开启: 1.创建netshare.bat文件,内容如下: @echo offnet share C$ /deletenet share D$ /deletenet shar

安装Exchange 2010 & 2007 RU补丁时报错 Event ID: 1024 Error Code 1603

最近一个企业的朋友在部署 Exchange 2010 SP3 RU补丁的时候,无法安装补丁,并且一起遇到下图中的报错,再尝试了修改运行权限和关闭杀毒软件的办法后,依然无法解决. 后来查阅了一些KB发现,导致这个问题的最终原因是 UR补丁的"过早的结束",因为服务器上设定好了自己的User Access Control (UAC), 这个时候有的朋友也许会说,那好办,直接关掉! 但是在这里我强烈建议大家不要去做这样的操作,因为这样的策略很多时候是GPO组策略下发的,或者是本身服务器出于安