Using PowerShell to realize the unattended installation of server common software

Time:2019-11-15

Operating system: Windows Server 2016, Windows Server 2019

Software environment:

type

Name

Edition

 

system function

TelnetClien

   
 

IIS

 

Enable asp.net 4.7

 

Hyper-V

 

Enabling management

Common software

Winrar

5.0

 
 

FireFox

67 CHS

 
 

SqlServer

2016

Enable TCP 1436

 

Microsoft SQL Server Management Studio

14.0.17277.0

 
 

Redis

3.2.1

 
 

Safety of tinder

Personal version 4.0

 

Running environment

DotnetFramework

4.7.2

 
 

DotnetCoreSDK

2.2.104

 
 

DotnetCore-IIS-hosting

2.1.7

 
 

VC++ Runtime

2017

 
 

firewall

 

Turn off all firewalls

 

 

PS script

@@@code

$installSql = 1

$installSSMS = 1

$installIIS =1

$installHyperV =1

$installDotnet462 =1

$installDotcore220 = 1

$installVCRuntime = 1

$installSysdiag = 1

$installRedis =1

 

$mainDir =”d:\”

$mainUrl = “http://192.168.10.36/soft”

 

 

$tmpPath =$mainDir + “temp\system”

$normalPath = @()

$normalPath += $tmpPath

$normalPath += $mainDir + “data\sql”

$normalPath += $mainDir + “data\web”

$normalPath += $mainDir + “app\redis”

$normalPath += $mainDir + “app\dotnet”

$normalPath += $mainDir + “Hyper-V\Virtual Hard Disks”

$normalPath += $mainDir + “Hyper-V\vm”

 

$firefoxFile = “FireFox.exe”

$vcruntimeFile = “vc_redist.exe”

$winrarFile = “winrar.exe”

$winrarKeyFile = “rarreg.key”

$sqlFile = “sql2016_deve_sp2.iso”

$sqlServiceName = “SQL2016”

$ssmsFile =”ssms2017.exe”

$dotnetFile = “NDP472.exe”

$dotnetCHSFile = “NDP472CHS.exe”

$dotnetcoreFile =”dotnetcoresdk-2.2.104.exe”

$dotnetcoreHostFile =”dotnet-hosting-2.1.7-win.exe”

$sysdiagFile = “sysdiag.exe”

$redisFile = “Redis.msi”

# add path

 

Function CreateDir($arg)

{

if (![System.IO.Directory]::Exists($arg))

{

# [System.IO.Directory]::CreateDirectory($dir);

mkdir $arg | Out – Null

}

}

Function Down($url , $file, $force)

{

 

$needDown = 1;

if ($force – eq 1){

$needDown = 1;

}else{

if ([System.IO.File]::Exists($file))

{

Write – host “already exists $file, matching…”

$1 = $url + “.md5.txt”

$2 = $file + “.md5.txt”

#Write-Host $1,$2

if (![System.IO.File]::Exists($2))

{

Invoke – WebRequest – uri $1 – OutFile $2

Unblock – File $2

}

$md5_2 = [System.IO.File]::ReadAllText($2);

$md5 = (Get – FileHash $file – Algorithm MD5).Hash

if ( $md5 – eq $md5_2){

$needDown = 0;

Write – host “$file has the same hash, no need to download”

}else{

Write – host “$file hash is $MD5, required is $md5_”

}

}

}

if ($needDown – eq 1){

Write – host “start downloading $URL to $file…”

Invoke – WebRequest – uri $url – OutFile $file

Unblock – File $file

}

 

}

 

function DownloadAndInstall( $url, $file,$name,$para)

{

Down $url $file 0

Write – host “please wait for the $name installation interface to appear and complete the interaction” – foregroup “yellow”

Start – Process $file $para – Wait

Write – host “$name installation complete”

}

 

Function ChangeSqlServerTcpPort( $name , $port )

{

[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SqlServer.SqlWmiManagement”) | Out-Null

$server_name = (Get-WmiObject -Class Win32_ComputerSystem -Property Name).Name

$Machine = new-object ‘Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer’ $server_name

 

$instance = $Machine.ServerInstances[ $name];

 

$ipAll = $instance.ServerProtocols[‘Tcp’].IPAddresses[‘IPAll’];

$ipAll.IPAddressProperties[‘TcpPort’].Value = “${port}”

$instance.ServerProtocols[‘Tcp’].Alter();

}

 

Function OpenFirewall( $name , $port , $tcp )

{

Remove – NetFirewallRule – DisplayName “$name” – ErrorAction SilentlyContinue

New – NetFirewallRule – DisplayName “$name” – Direction Inbound – LocalPort ${ port}

-Protocol ${ tcp}

-Action Allow | Out – Null

Write – host “open services ${name} port ${port}, ${TCP}”

}

 

Function DisableAllFirewallRule( $port )

{

Set – NetFirewallProfile – Profile Public – Enabled false

Set – NetFirewallProfile – Profile Private – Enabled false

Get – NetFirewallRule | foreach{

$flag = $_.Enabled

if ( $flag – eq 1 ){

$name =$_.DisplayName

Set – NetfirewallRule – DisplayName $name – Enabled false – ErrorAction SilentlyContinue

Write – host “disable firewall $name”

}

}

Openfirewall “dedicated for operation and maintenance” $port TCP

Set – NetFirewallProfile – Profile Public – Enabled true

Set – NetFirewallProfile – Profile Private – Enabled true

}

 

Function GetRegKey($key,$name)

{

 

$result = (Get – ItemProperty – Path “$key” – ErrorAction SilentlyContinue).$name

return $result

#Write-Host $result

}

 

Function HasDotnetVersion($iscore,$version)

{

if ($iscore – eq 0){

$dotVersion = GetRegKey “HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full” “Release”

if ( $dotVersion – ge $version)

{

return GetRegKey “HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full” “Version”

}

}

else{

$x = Get – Command dotnet – ErrorAction SilentlyContinue

if ($?){

return (dir(Get – Command dotnet).Path.Replace(‘dotnet.exe’, ‘sdk’) – ErrorAction Ignore | Where – Object {$_.Name – eq “$version”} | Select Name ).Name

}

}

return “”;

}

 

Write host “folder handling”

$normalPath | foreach {

CreateDir $_

}

 

$winrarVersion = GetRegKey “HKLM:\SOFTWARE\WinRAR” “exe64”

if ($winrarVersion.Length -gt 0){

Write host “WinRAR has $winrarfile installed”

}

else{

DownloadAndInstall “$mainUrl/system/$winrarFile” “$tmpPath\$winrarFile” “Winrar” ” /install /passive /norestart”

$winrarVersion = GetRegKey “HKLM:\SOFTWARE\WinRAR” “exe64”

Down “$mainUrl/system/$winrarKeyFile” “$tmpPath\$winrarKeyFile” 0

[System.IO.File]::Copy(“$tmpPath\$winrarKeyFile”, [System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName(“$winrarVersion”) , $winrarKeyFile) , 1)

}

 

Write host “install Firefox”

$installFireFox = 1

$1 =Get-Item -Path “HKCU:\Software\Mozilla\Firefox\Launcher” -ErrorAction SilentlyContinue

if ($?)

{

$firefoxVersion=$1.GetValueNames()[0]

#= GetRegKey “HKCU:\Software\Mozilla\Mozilla Firefox” “CurrentVersion”

if ($firefoxVersion.Length -gt 0){

Write host “WinRAR installed on $Firefox version”

$installFireFox = 0

}

}

if ($installFireFox -eq 1) {

DownloadAndInstall “$mainUrl/system/$firefoxFile” “$tmpPath\$firefoxFile” “FireFox” ” /install /passive /norestart”

}

 

Write host “redis processing”

if ($installRedis -eq 1){

$redisService = Get-Service Redis -ErrorAction SilentlyContinue

if($?){

Write host “redis installed”

$installRedis = 0

}else{

DownloadAndInstall “$mainUrl/system/$redisFile” “$tmpPath\$redisFile” “Redis” ” ”

 

}

}

 

Write host “firewall processing”

DisableAllFirewallRule 3389

OpenFirewall sqlServer 1436 tcp

OpenFirewall BandService 3410-3415 tcp

OpenFirewall logServerWeb 5881 tcp

OpenFirewall logServer 5880 udp

OpenFirewall Redis 6379 tcp

 

Write host “” telnetclient processing

$telnet = Get-WindowsFeature “telnet-client” | select InstallState

if($telnet.InstallState -eq “Installed”){

Write host “telnetclient installed”

}

else{

Install-WindowsFeature “telnet-client” | Out-Null

}

 

 

 

if ($installDotnet462 -eq 1){

Write host “dotnet processing”

$dotVersion =HasDotnetVersion 0 461814 #394802

if( $dotVersion.Length -gt 0 )

{

Write host “dotnet $dotversion installed”

}else{

DownloadAndInstall “$mainUrl/system/$dotnetFile” “$tmpPath\$dotnetFile” “Dotnet” ” /install /passive /norestart”

DownloadAndInstall “$mainUrl/system/$dotnetCHSFile” “$tmpPath\$dotnetCHSFile” “DotnetCHS” ” /install /passive /norestart”

}

}

 

if( $installIIS -eq 1){

Write host “IIS processing”

Install-WindowsFeature Web-Server -ErrorAction Continue

 

 

Add-WindowsFeature Web-Server,Web-WebServer,Web-Security,Web-Filtering,Web-Common-Http,Web-Http-Errors,Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing

Add-WindowsFeature Web-Performance,Web-Stat-Compression,Web-Health,Web-Http-Logging,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Mgmt-Tools,Web-Mgmt-Console

Write host “web server (IIS) installation complete”

}

 

if ($installDotcore220 -eq 1){

Write host “dotnetcore processing”

$dotVersion =HasDotnetVersion 1 “2.2.104”

if( $dotVersion.Length -gt 0 )

{

Write host “dotnetcore $dotversion installed”

}else{

DownloadAndInstall “$mainUrl/system/$dotnetcoreFile” “$tmpPath\$dotnetcoreFile” “DotnetCoreSDK” ” /install /passive /norestart”

DownloadAndInstall “$mainUrl/system/$dotnetcoreHostFile” “$tmpPath\$dotnetcoreHostFile” “DotnetCore IIS Hosting” ” /install /passive /norestart”

 

}

}

 

Write host “handling the C + + 2017 runtime”

if ($installVCRuntime -eq 1){

$vcruntimeVersion = GetRegKey “HKLM:\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum” “Version”

if ($vcruntimeVersion.Length -gt 0){

if([System.Version]::Parse($vcruntimeVersion).Minor -ge 16){

$installVCRuntime = 0

Write host “Visual C + + redistributable $vcruntimeversion installed” ා14.12.25810 14.16.27024

}

}

if($installVCRuntime -eq 1){

DownloadAndInstall “$mainUrl/system/$vcruntimeFile” “$tmpPath\$vcruntimeFile” “Visual C++ Redistributable” ” /install /passive /norestart”

}

}

Write host “the computer is about to restart. Please continue to execute the script after restarting” – foregroundcolor red

Restart-Computer

 

if ($installHyperV -eq 1){

Write host hyperv processing

$1 = (Get-WindowsFeature Hyper-V).InstallState

if ($1 -eq “Installed”){

Write host “hyperv installed”

Set-VMHost -ComputerName $env:COMPUTERNAME -VirtualHardDiskPath “d:\Hyper-V\Virtual Hard Disks” -VirtualMachinePath “d:\Hyper-V\VM”

}

else{

Install-WindowsFeature Hyper-V -IncludeManagementTools -Restart

}

}

 

if ($installSql -eq 1){

Write host “$sqlservicename processing”

$sqlService = Get-Service MSSQL`$${sqlServiceName} -ErrorAction SilentlyContinue

if($?){

Write host “$sqlservicename installed”

$installSql = 0

#ChangeSqlServerTcpPort $sqlServiceName 1436

#Restart-Service MSSQL`$${sqlServiceName} -Force

}

 

 

 

if ($installSql -eq 1){

Down “$mainUrl/system/$sqlFile” “$tmpPath\$sqlFile” 0

 

$sqlIni = “${tmpPath}\${sqlFile}.ini”

Down $mainUrl/system/${sqlFile}.ini $sqlIni 0

$sqlFile=”$tmpPath\$sqlFile”

Write host “installs SQL server from the configuration file $sqlini, using the silent installation development version, and later needs to replace the official authorization serial number”

 

 

 

$1 = (Get-DiskImage -ImagePath $sqlFile).Attached

if (!$1){

Write host “load $sqlfile”

Mount-DiskImage -ImagePath $sqlFile | Out-Null

}

$1 = (Get-DiskImage -ImagePath $sqlFile | Get-Volume ).DriveLetter

$exe = $1 + “:\setup.exe ”

$para =”/ConfigurationFile=${sqlIni}”

# & $exe $para

 

Write host “please wait for the SQL server installation interface to appear and complete the interaction”

Start-Process $exe $para -Wait

ChangeSqlServerTcpPort $sqlServiceName 1436

Restart-Service MSSQL`$${sqlServiceName} -Force

}

}

if ($installSSMS -eq 1){

Write host “SSMS processing”

 

$ssmsKey = GetRegKey ‘HKCU:\Software\Microsoft\SQL Server Management Studio\14.0_Config’ ‘InstallDir’

if( $ssmsKey ){

Write host “SSMS installed on $ssmskey”

$installSSMS = 0

}else{

$ssmsKey = GetRegKey ‘HKLM:\SOFTWARE\Wow6432Node\Microsoft\AppEnv\14.0\Apps\ssms_14.0’ ‘StubExePath’

if ( $ssmsKey ){

Write host “SSMS installed on $ssmskey”

$installSSMS = 0

}

}

 

if ($installSSMS -eq 1)

{

DownloadAndInstall “$mainUrl/system/$ssmsFile” “$tmpPath\$ssmsFile” “Microsoft SQL Server Management Studio” ” /install /passive ”

}

}

 

 

 

if ($installSysdiag -eq 1){

Write host “safe handling of tinder”

$Key = GetRegKey ‘HKLM:\Software\Huorong\Sysdiag’ ‘InstallPath’

if( $Key.Length -gt 0 ){

Write host “Cashmere security installed in $key”

$installSysdiag = 0

}

if ($installSysdiag -eq 1)

{

Write host “please exit once after the completion of the fire safety installation” – foregroundcolor red

Downloadandinstall “$mainURL / system / $sysdiagfile” “$tmppath \ $sysdiagfile” “fire safety” “/ install / passive”

}

}

 

@@#

 

 

Database profile

@@@code

;SQL Server 2016 Configuration File

[OPTIONS]

 

; specifies the workflow for the installer, such as install, uninstall, or upgrade. This is a required parameter.

 

ACTION=”Install”

 

; specifies that SQL server setup should not display a privacy statement when running from the command line.

 

SUPPRESSPRIVACYSTATEMENTNOTICE=”True”

; the license terms will be displayed in the installer user interface for your review and acceptance, specifying that when run from the command line, set to true to automatically accept the license

IACCEPTSQLSERVERLICENSETERMS=”True”

 

; by specifying this parameter and accepting the Microsoft r open and Microsoft r server terms, you confirm that you have read and understood the terms of use.

 

IACCEPTROPENLICENSETERMS=”True”

 

 

 

; use the / ENU parameter to install the English version of SQL Server on a localized windows operating system.

 

ENU=”False”

 

; setup will not display any user interface.

 

QUIET=”False”

 

; setup will only show progress without any user interaction.

 

QUIETSIMPLE=”True”

 

; parameters used to control user interface behavior. Valid values are normal for the full UI, autoadvance for the simplified UI, and enableuionservercore to skip the server core installer GUI block.

; uimode cannot be used after quietimple or quiet is used

;UIMODE=”Normal”

 

; specifies whether SQL server setup should discover and include product updates. Valid values are true and false or 1 and 0. By default, SQL Server Setup will include the updates found.

 

UpdateEnabled=”0″

 

; if this parameter is provided, this computer will use Microsoft Update to check for updates.

 

USEMICROSOFTUPDATE=”False”

 

; specifies the features to install, uninstall, or upgrade. The top-level feature list includes SQL, as, RS, is, MDS, and tools. The SQL feature installs the database engine, replication, full-text, and data quality services (DQS) servers. The tools feature installs the shared components.

 

FEATURES=SQLENGINE,REPLICATION

 

; specifies where SQL Server Setup will get product updates. Valid values are “Mu” (to search for product updates), valid folder paths, and relative paths such as. \ myupdates or UNC shared directories. By default, SQL Server Setup searches for Microsoft Update or windows update services through window server update services.

 

UpdateSource=”MU”

 

; display command line parameter usage

 

HELP=”False”

 

; specifies that detailed setup logs should be delivered to the console.

 

INDICATEPROGRESS=”False”

 

; specifies that the installer should be installed in wow64. This command line parameter is not supported on IA64 or 32-bit systems.

 

X86=”False”

 

; specifies the default or named instance. MSSqlServer is the default instance of non express version, and sqlexpress is the default instance of express version. This parameter is required when installing SQL Server database engine (SQL), analysis services (as), or reporting services (RS).

 

INSTANCENAME=”SQL2016″

 

; specifies the root directory where the shared components are installed. This directory remains unchanged after the shared components have been installed.

 

INSTALLSHAREDDIR=”C:\Program Files\Microsoft SQL Server”

 

; specify the installation root directory of wow64 shared components. This directory remains unchanged after the wow64 share has been installed.

 

INSTALLSHAREDWOWDIR=”C:\Program Files (x86)\Microsoft SQL Server”

 

; specify the instance ID for the SQL Server feature you have specified. The SQL server directory structure, registry structure, and service name will contain the instance ID of the SQL server instance.

 

INSTANCEID=”SQL2016″

 

; TelemetryUserNameConfigDescription

 

SQLTELSVCACCT=”NT Service\SQLTELEMETRY$SQL2016″

 

; TelemetryStartupConfigDescription

 

SQLTELSVCSTARTUPTYPE=”Automatic”

 

; specify the installation directory.

 

INSTANCEDIR=”C:\Program Files\Microsoft SQL Server”

 

; agent account name

 

AGTSVCACCOUNT=”NT Service\SQLAgent$SQL2016″

 

; automatically start the service after installation.

 

AGTSVCSTARTUPTYPE=”Automatic”

 

; cm block TCP communication port

 

COMMFABRICPORT=”0″

 

; how the matrix uses private networks

 

COMMFABRICNETWORKLEVEL=”0″

 

; how to protect communication between blocks

 

COMMFABRICENCRYPTION=”0″

 

; TCP port used by CM block

 

MATRIXCMBRICKCOMMPORT=”0″

 

; start type of SQL Server service.

 

SQLSVCSTARTUPTYPE=”Automatic”

 

; the level at which FileStream functionality is enabled (0, 1, 2, or 3).

 

FILESTREAMLEVEL=”2″

 

; the name of the windows share to create for FileStream file I / O.

 

FILESTREAMSHARENAME=”SQL2016″

 

; set to ‘1’ to enable ranu for SQL Server Express.

 

ENABLERANU=”False”

 

; specifies the windows collation or SQL collation to use for the database engine.

 

SQLCOLLATION=”Chinese_PRC_CI_AS”

 

; account for SQL Server Service: domain \ user or system account.

 

SQLSVCACCOUNT=”NT Service\MSSQL$SQL2016″

 

; set to true to enable instant file initialization for SQL server services. If enabled, setup grants the database engine service Sid the execute volume maintenance task privilege. This can lead to information disclosure because it allows unauthorized principals to access deleted content.

 

SQLSVCINSTANTFILEINIT=”False”

 

; the Windows account to set as the SQL server system administrator.

 

SQLSYSADMINACCOUNTS=”.\Administrator”

 

; the default is windows authentication. Use “SQL” for Mixed Mode authentication.

 

SECURITYMODE=”SQL”

SAPWD=”Pa4432^22″

 

; number of database engine tempdb files.

 

SQLTEMPDBFILECOUNT=”8″

 

; specifies the initial size (in MB) of the database engine tempdb data file.

 

SQLTEMPDBFILESIZE=”8″

 

; specifies the automatic growth increment (in MB) for each database engine tempdb data file.

 

SQLTEMPDBFILEGROWTH=”64″

 

; specifies the initial size (in MB) of the database engine tempdb log file.

 

SQLTEMPDBLOGFILESIZE=”8″

 

; specifies the automatic growth increment (MB) of the database engine tempdb log file.

 

SQLTEMPDBLOGFILEGROWTH=”64″

 

; database engine root data directory.

 

INSTALLSQLDATADIR=”D:\data\sql”

 

; set the current user as the database engine system administrator for% SQL product short name% express.

 

ADDCURRENTUSERASSQLADMIN=”False”

 

; specify 0 to disable the TCP / IP protocol and 1 to enable it.

 

TCPENABLED=”1″

 

; specify 0 to disable the named pipes protocol and 1 to enable it.

 

NPENABLED=”0″

 

; startup type of Browser service.

 

BROWSERSVCSTARTUPTYPE=”Disabled”

@@#

 

output

@@@code

Folder processing

Start downloading http://192.168.10.36/system/winrar.exe to D: \ temp \ system \ winrar.exe

Please wait for the WinRAR installation interface to appear and complete the interaction

WinRAR installation complete

Start downloading http://192.168.10.36/system/rarreg.key to D: \ temp \ system \ rarreg.key

Install Firefox

Start downloading http://192.168.10.36/system/firefox.exe to D: \ temp \ system \ firefox.exe

Please wait for the Firefox installation interface to appear and complete the interaction

Firefox installation complete

Redis processing

Start downloading http://192.168.10.36/system/redis.msi to D: \ temp \ system \ redis.msi

Please wait for the redis installation interface to appear and complete the interaction

Redis installation completed

Firewall processing

Disable firewalls connected user experiences and telemetry

Disable firewall Delivery Optimization (TCP in)

Disable firewall Delivery Optimization (UDP in)

…..

Disable firewall network discovery (UPnP in)

Disable firewall Firefox (C: \ program files (x86) \ Mozilla Firefox)

Disable firewall Firefox (C: \ program files (x86) \ Mozilla Firefox)

Disable firewall redis

Open service operation and maintenance dedicated port 3389, TCP

Open service sqlserver port 1436, TCP

Open service bandservice port 3410-3415, TCP

Open service logserver web port 5881, TCP

Open service logserver port 5880, UDP

Open service redis port 6379, TCP

Telnetclient processing

Dotnet processing

Start downloading http://192.168.10.36/system/ndp472.exe to D: \ temp \ system \ ndp472.exe

Please wait for the dotnet installation interface to appear and complete the interaction

Dotnet installation complete

Start downloading http://192.168.10.36/system/ndp472chs.exe to D: \ temp \ system \ ndp472chs.exe

Please wait for the dotnetchs installation interface to appear and complete the interaction

Dotnetchs installation complete

IIS processing

Success Restart Needed Exit Code Feature Result

——- ————– ——— ————–

True yes successrest… {common HTTP functions, default documents, directory browsing, request filtering…}

Warning: this server must be restarted to complete the installation process.

True Yes NoChangeNeeded {}

True yes successrest… {asp.net 4.6, application development, asp.net 4.6, ISAPI extension

Warning: this server must be restarted to complete the installation process.

Web server (IIS) installation complete

Dotnetcore processing

Start downloading http://192.168.10.36/system/dotnetcoresdk-2.2.104.exe to D: \ temp \ system \ dotnetcoresdk-2.2.104.exe

Please wait for the dotnetcoresdk installation interface to appear and complete the interaction

Dotnetcore 2.2.104 installed

Handling the C + + 2017 runtime

Visual C + + redistributable 14.16.27024 installed

Sql2016 processing

D: \ temp \ system \ sql2016 ﹣ deve ﹣ sp2.iso already exists, comparing

D: e352c8a057bf78fa0348757716f46aa0, cf399685c44b7988f911195401c01b12

Start to download http://192.168.10.36/system/sql2016 ﹣ deve ﹣ sp2.iso to D: \ temp \ system \ sql2016 ﹣ deve ﹣ sp2.iso

Install SQL server from the configuration file D: \ temp \ system \ sql2016 ﹣ develop ﹣ sp2.iso.ini, using the silent installation development version, and later need to replace the official authorization serial number

Load D: \ temp \ system \ sql2016 ﹣ deve ﹣ sp2.iso

Please wait for the SQL server installation interface to appear and complete the interaction

Warning: waiting for service SQL Server (sql2016) (MSSQL $sql2016) to stop

SSMS processing

D: \ temp \ system \ ssms2017.exe already exists, comparing

D: \ temp \ system \ ssms2017.exe hash is 7455391756727cbeea2ba32e0c5bacba, and 324f66d14fd1a8a368db208534faa496 is required

Start downloading http://192.168.10.36/system/ssms2017.exe to D: \ temp \ system \ ssms2017.exe

Please wait for the Microsoft SQL Server Management Studio installation interface to appear and complete the interaction

Microsoft SQL Server Management Studio installation complete

Safety handling of tinder

Please exit once after the safety installation of tinder

Start downloading http://192.168.10.36/system/sysdiag.exe to D: \ temp \ system \ sysdiag.exe

Please wait for the fire safety installation interface to appear and complete the interaction

Safety installation of tinder completed

 

 

PS C:\Windows\system32>

@@#