####################################################################################
# Set-Lync2010Windows2008R2Features.ps1
# Configures Windows Features to install Lync Server 2010
# on a Windows Server 2008 R2 Server
#
# v03 February2011 by Hansen (http://msunified.net)
# v04 04-06-2011 by Pat Richard (http://exchangeblogs.com)
#
# Thanks to
# Marjus Sirvinsks (http://marjuss.wordpress.com/) for adapting the script for OCS and Lync
# The Script is almost entirely based on Pat Richard, Bhargav Shukla and Anderson Patricio's script designed for Exchange 2010
# check it out here: http://msunified.net/exchange-downloads/script-exchange2010prereqs-ps1/
#
# future: Lync Server 2010, Stress and Performance Tool
# http://www.microsoft.com/downloads/en/details.aspx?FamilyID=94B5F191-6D80-4DEC-94C2-FCA57995F8B7&displaylang=en
####################################################################################
#Requires -Version 2.0
# Detect correct OS here and exit if no match (we intentionally truncate the last character to account for service packs)
if ((Get-WMIObject win32_OperatingSystem).Version -notmatch '6.1.760'){
Write-Host "`nThis script requires a version of Windows Server 2008 R2, which this is not. Exiting...`n" -ForegroundColor Red
Exit
}
clear-host
pushd
[string] $TargetFolder = "c:\Install"
[bool] $WasInstalled = $false
[bool] $RebootRequired = $false
# determine if BitsTransfer is already installed
if ((Get-Module BitsTransfer).installed -eq $true){[bool] $WasInstalled = $true}
[string] $opt = "None"
[bool] $HasInternetAccess = ([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet)
[string] $menu = @'
***************************************
Lync Server 2010 - Prerequisites script
***************************************
Please select an option from the list below.
1) Front-End
2) Director
3) Monitoring/Archiving
4) Communicator Web Access (OCS 2007 R2)
5) Mediation
6) Edge/XMPP GW
7) GroupChat
8) Download and install Lync Server 2010 Resource Kit
9) Download and install Lync Server 2010 Best Practices Analyzer
10) Download and install Lync Server 2010 Stress and Performance Tool
11) Disable IPv6
12) Install Telnet client
13) Install Visual C++ 2008 Redistributable
14) Download and install Lync 'IM an Expert' (alpha)
15) Launch Windows Update
98) Restart the Server
99) Exit
Select an option.. [1-99]?
'@
function GetIt ([string]$sourcefile) {
if ($HasInternetAccess){
# check if BitsTransfer is installed
if ((Get-Module BitsTransfer) -eq $null){
Write-Host "BitsTransfer: Installing..." -NoNewLine
Import-Module BitsTransfer
Write-Host "Done! " -ForegroundColor Green
}
[string] $targetfile = $sourcefile.Substring($sourcefile.LastIndexOf("/") + 1)
if (Test-Path $targetfolder){
Write-Host "Folder: $targetfolder exists."
} else{
Write-Host "Folder: $targetfolder does not exist, creating..." -NoNewline
New-Item $targetfolder -type Directory | Out-Null
Write-Host "Done! " -ForegroundColor Green
}
if (Test-Path "$targetfolder\$targetfile"){
Write-Host "File: $targetfile exists."
}else{
Write-Host "File: $targetfile does not exist, downloading..." -NoNewLine
Start-BitsTransfer -Source "$SourceFile" -Destination "$targetfolder\$targetfile"
Write-Host "Done! " -ForegroundColor Green
}
}else{
Write-Host "Internet access not detected. Please resolve and try again." -foregroundcolor red
}
} #end GetIt
function TelnetClient {
$a = New-Object -comobject wscript.shell
$intAnswer = $a.popup("Do you want to include Telnet client?",0,"Telnet client",4)
if ($intAnswer -eq 6) {
#yes
Check4SM
if ((Get-WindowsFeature Telnet-Client).installed -eq $false){Add-WindowsFeature Telnet-Client} else {Write-Host "Telnet client already installed"}
} else {
#no
# $a.popup("You answered no.")
}
} #end TelnetClient
function DocViewer {
$a = new-object -comobject wscript.shell
$intAnswer = $a.popup("Lync Resource Kit documentation is based on Microsoft Word. Would you like to install the free Word viewer?",0,"Word Viewer",4)
if ($intAnswer -eq 6) {
#yes
if (!(get-item "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{90850409-6000-11D3-8CFE-0150048383C9}" -ErrorAction SilentlyContinue)){
GetIt "http://download.microsoft.com/download/6/a/6/6a689355-b155-4fa7-ad8a-dfe150fe7ac6/wordview_en-us.exe"
Write-Host "Installing..." -ForegroundColor Green -nonewline
Invoke-Expression "$targetfolder\wordview_en-us.exe /q"
Write-Host "Done!" -ForegroundColor Green
}
if (!(get-item "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{90120000-0020-0409-0000-0000000FF1CE}" -ErrorAction SilentlyContinue)){
GetIt "http://download.microsoft.com/download/9/2/2/9222D67F-7630-4F49-BD26-476B51517FC1/FileFormatConverters.exe"
Write-Host "Installing..." -ForegroundColor Green -nonewline
Invoke-Expression "$targetfolder\FileFormatConverters.exe /q"
Write-Host "Done!" -ForegroundColor green
}
} else {
#no
# $a.popup("You answered no.")
}
} #end DocViewer
function Check4SM {
if ((Get-Module ServerManager).installed -ne $true){Import-Module ServerManager}
} #end Check4SM
function VCRedist {
if (!(get-item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}" -ErrorAction SilentlyContinue)){
GetIt "http://download.microsoft.com/download/9/7/7/977B481A-7BA6-4E30-AC40-ED51EB2028F2/vcredist_x64.exe"
Write-Host "Installing..." -ForegroundColor Green -nonewline
cmd.exe /c $targetfolder\vcredist_x64.exe /qb
Write-Host "Done!" -ForegroundColor green
# should add update from KB 2467174
}
} #end VCRedist
function DisableIPv6 {
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters DisabledComponents 0xffffffff -type dword
Write-Host "done!" -foregroundcolor green
$RebootRequired = $true
} #end DisableIPv6
Do {
if ($RebootRequired -eq $true){Write-Host "`t`t`t`t`t`t`t`t`t`n`t`t`t`tREBOOT REQUIRED!`t`t`t`n`t`t`t`t`t`t`t`t`t`n`t`tDO NOT INSTALL Lync BEFORE REBOOTING!`t`t`n`t`t`t`t`t`t`t`t`t" -foregroundcolor yellow}
if ($opt -ne "None") {Write-Host "Last command: "$opt -backgroundcolor Yellow -foregroundcolor black}
$opt = Read-Host $menu
switch ($opt) {
1 { Check4SM;TelnetClient;Add-WindowsFeature NET-Framework-Core,RSAT-ADDS,Web-Static-Content,Web-Default-Doc,Web-Http-Errors,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Http-Logging,Web-Log-Libraries,Web-Http-Tracing,Web-Windows-Auth,Web-Filtering,Web-Stat-Compression,Web-Mgmt-Console,Web-Scripting-Tools,Web-Client-Auth,Desktop-Experience; $RebootRequired = $true }
2 { Check4SM;TelnetClient;Add-windowsfeature NET-Framework-Core,Web-Static-Content,Web-Default-Doc,Web-Http-Errors,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Http-Logging,Web-Log-Libraries,Web-Http-Tracing,Web-Windows-Auth,Web-Filtering,Web-Stat-Compression,Web-Mgmt-Console,Web-Scripting-Tools,Web-Client-Auth; $RebootRequired = $true }
3 { Check4SM;TelnetClient;Add-windowsfeature NET-Framework-Core,msmq-server,msmq-directory }
4 { Check4SM;TelnetClient;Add-windowsfeature NET-Framework-Core,web-server, web-http-redirect, web-asp-net, web-http-logging, web-log-libraries, web-request-monitor, web-http-tracing, web-basic-auth, web-windows-auth, web-mgmt-console, web-scripting-tools, web-mgmt-compat, was-process-model, was-net-environment, rsat-adds ; $RebootRequired = $true }
5 { Check4SM;TelnetClient;Add-windowsfeature NET-Framework-Core }
6 { Check4SM;TelnetClient;Add-windowsfeature NET-Framework-Core }
7 { Check4SM;TelnetClient;Add-windowsfeature NET-Framework-Core, web-server, web-mgmt-compat, web-asp-net, msmq-server, msmq-directory, rsat-adds ; $RebootRequired = $true }
8 {
if (!(get-item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9C44E652-CBBC-4E1C-8172-21A7D46CAB85}" -ErrorAction SilentlyContinue)){
GetIt "http://download.microsoft.com/download/1/8/A/18ADD884-E16F-4AD3-8422-FC80073439AA/OCSReskit.msi"
Check4SM;Add-WindowsFeature NET-Framework-Core
Write-Host "Installing..." -ForegroundColor Green -nonewline
cmd.exe /c $targetfolder\OCSReskit.msi /qb
Write-Host "Done!" -ForegroundColor Green
}
DocViewer
}
9 {
if (!(get-item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{88033F09-23A0-44EC-9063-7CBAA4BE4975}" -ErrorAction SilentlyContinue)){
GetIt "http://download.microsoft.com/download/3/3/8/338D2314-1D23-47C1-8BB4-80FD39B84EA6/RTCBPA.msi"
Check4SM;Add-WindowsFeature NET-Framework-Core
Write-Host "Installing..." -ForegroundColor Green -nonewline
cmd.exe /c $targetfolder\RTCBPA.msi /qb
Write-Host "Done!" -ForegroundColor Green
}
}
10 {
if (!(get-item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{94FD6E73-38F6-4DBE-AA3B-E403678868C9}" -ErrorAction SilentlyContinue)){
Check4SM;Add-WindowsFeature NET-Framework-Core
vcredist
GetIt "http://download.microsoft.com/download/7/1/E/71EC25F9-575C-47BF-A4C0-E5DFFD42AA56/CapacityPlanningTool.msi"
Write-Host "Installing..." -ForegroundColor Green -nonewline
cmd.exe /c $targetfolder\CapacityPlanningTool.msi /qb
Write-Host "Done!" -ForegroundColor green
}
DocViewer
}
11 { DisableIPv6 }
12 { Check4SM;Add-WindowsFeature Telnet-Client }
13 { VCRedist }
14 {
Check4SM;Add-WindowsFeature NET-Framework-Core
GetIt "http://download.microsoft.com/download/3/B/1/3B13662A-8445-4238-A685-F15899032755/UcmaRuntimeSetup.exe"
Write-Host "Installing..." -ForegroundColor Green -nonewline
cmd.exe /c $targetfolder\UcmaRuntimeSetup.exe /q
Write-Host "Done!" -ForegroundColor green
GetIt "http://download.microsoft.com/download/9/E/2/9E2CBE89-A25F-4158-A2FC-CD227FC4ED14/IManExpert.msi"
Write-Host "Installing..." -ForegroundColor Green -nonewline
cmd.exe /c $targetfolder\IManExpert.msi /qb
Write-Host "Done!" -ForegroundColor green
}
15 {cmd.exe /c "%windir%\system32\wuapp.exe startmenu"}
98 { if (($WasInstalled -eq $false) -and (Get-Module BitsTransfer)){Write-Host "Removing BitsTransfer..." -NoNewLine;Remove-Module BitsTransfer;Write-Host "removed!" -ForegroundColor Green};Write-Host "Exiting and rebooting..."; Restart-Computer}
99 { if (($WasInstalled -eq $false) -and (Get-Module BitsTransfer)){Write-Host "Removing BitsTransfer..." -NoNewLine;Remove-Module BitsTransfer;Write-Host "removed!" -ForegroundColor Green};popd;Write-Host "Exiting..."}
default {write-host "You haven't selected any of the available options. "}
}
} while ($opt -ne 99)
|