Instal_edeiaLab.psm1

<#
.Synopsis
   Instalar e-DeiaLab em um terminal
.DESCRIPTION
   Este modulo instalada o e-DeiaLab num terminal juntamente com todas as ferramentas necessárias
.EXAMPLE
   get-eDeiaLab -DrDestino c:\edeia -Servidor=192.168.1.1
.EXAMPLE
   get-eDeiaLab -DrDestino c:\edeia -Servidor=Servidor
#>

function get-eDeiaLab
{
    [CmdletBinding()]
    Param
    (
        # Diretorio local onde sera instalado e-DeiaLab c:\edeia
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        $DirDestino="c:\edeiax",
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=1)]
        # IP ou DNS do servidor onde está o e-DeiaLab
        $Servidor="192.168.111.3",
        [Parameter(Position=2)]
        # IP ou DNS do servidor onde está o e-DeiaLab
        [bool]$SSL=$false
    )

    Begin
    {    
        $start_timeT = Get-Date
        $start_time = Get-Date
        If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
        [Security.Principal.WindowsBuiltInRole] "Administrator")) 
        { 
            Write-Warning "You do not have Administrator rights to run this script!`nPlease re-run this script as an Administrator!" 
            Break 
        } 
        $Caption = (Get-WmiObject "win32_operatingsystem" | Select caption).Caption 
        If(-not ($Caption -match "Microsoft Windows 8" -OR $Caption -match "Microsoft Windows 7" -OR $Caption -match "Microsoft Windows 10") )
            { 
                Write-Error "Please run this script in Windows 10, Windows 8/8.1 or Windows 7" 
            }
    }
    Process
    {

            #region .Net Frameworks
            $start_time = Get-Date

            $Caption = (Get-WmiObject "win32_operatingsystem" | Select caption).Caption 
        
            If($Caption -match "Microsoft Windows 8" -OR $Caption -match "Microsoft Windows 7" -OR $Caption -match "Microsoft Windows 10") 
            { 
                $Result = Dism /online /get-featureinfo /featurename:NetFx3 
                If($Result -contains "State : Enabled") 
                { 
                    Write-Warning ".Net Framework 3.5 has been installed and enabled." 
                } 
                Else  
                { 
                        Write-Host "Installing .Net Framework 3.5, do not close this prompt..." |  
                        Dism /online /Enable-feature /featurename:NetFx3 | Out-Null  
                        $Result = Dism /online /Get-featureinfo /featurename:NetFx3 
                        If($Result -contains "State : Enabled") 
                        { 
                            Write-Host "Install .Net Framework 3.5 successfully." 
                        } 
                        Else 
                        { 
                            Write-Host "Failed to install Install .Net Framework 3.5, you can use local source to try again." 
                        } 
                        Write-Host "Tempo: $((Get-Date).Subtract($start_time).Hours) horas, $((Get-Date).Subtract($start_time).Minutes) minutos $((Get-Date).Subtract($start_time).Seconds) segundos"        
                        #DISM.exe /online /enable-feature /all /featurename:NetFx4
                } 
                             
                #.net 4.0
                $start_time = Get-Date
                $Result = Dism /online /get-featureinfo /featurename:NetFx4 
                If($Result -contains "State : Enabled") 
                { 
                    Write-Warning ".Net Framework 4 has been installed and enabled." 
                } 
                Else  
                { 
                        Write-Host "Installing .Net Framework 4, do not close this prompt..." |  
                        Dism /online /Enable-feature /featurename:NetFx4 | Out-Null  
                        $Result = Dism /online /Get-featureinfo /featurename:NetFx4 
                        If($Result -contains "State : Enabled") 
                        { 
                            Write-Host "Install .Net Framework 4 successfully." 
                        } 
                        Else 
                        { 
                            Write-Host "Failed to install Install .Net Framework 4, you can use local source to try again." 
                        }         
                        #DISM.exe /online /enable-feature /all /featurename:NetFx4
                         Write-Host "Tempo: $((Get-Date).Subtract($start_time).Hours) horas, $((Get-Date).Subtract($start_time).Minutes) minutos $((Get-Date).Subtract($start_time).Seconds) segundos"             
                } 
 
            } 
            Else 
            { 
                Write-Error "Please run this script in Windows 10, Windows 8/8.1 or Windows 7" 
            } 
            #endregion


            #region Testar endereço servidor
            $start_time = Get-Date
            # testar se existe o diretorio e se não criar

            if (-not(Test-Path -Path $DirDestino))
            {
                Write-Verbose "Criar diretório $DirDestino"
                New-Item -Path $DirDestino -ItemType Directory
            }

            # descarregar o necessário do servidor cliente ou remoto

            

            $filelocal="menulab.exe"

            #testar endereço do servidor

            $caminhoservidor_ok=$false
            if ($SSL)
            {
                $url_edeia="https://$servidor/edeia/"
                }
            else
            {
                $url_edeia="http://$servidor/edeia/"
            }
          
            Write-Verbose "Download file $url_edeia$filelocal para $DirDestino\$filelocal"
            Start-BitsTransfer -Source "$url_edeia$filelocal" -Destination "$DirDestino\$filelocal" -ErrorAction SilentlyContinue
            if (Test-Path -Path "$DirDestino\$filelocal")
            {
                $caminhoservidor_ok=$true
            }

            if (-not($caminhoservidor_ok))
            {
                if ($SSL)
                {
                    $url_edeia="https://$servidor/"
                    }
                else
                {
                    $url_edeia="http://$servidor/"
                }
                
                Write-Verbose "Download file $url_edeia$filelocal para $DirDestino\$filelocal"
                Start-BitsTransfer -Source "$url_edeia$filelocal" -Destination "$DirDestino\$filelocal" -ErrorAction SilentlyContinue
                if (Test-Path -Path "$DirDestino\$filelocal")
                {
                    $caminhoservidor_ok=$true
                }
            }

            if (-not($caminhoservidor_ok))
            {
                #falhou o normal, vamos ver se SSL esta ok
                if (-not($SSL))
                {
                    $url_edeia="https://$servidor/edeia/"
                }

                
                Write-Verbose "Download file $url_edeia$filelocal para $DirDestino\$filelocal"
                Start-BitsTransfer -Source "$url_edeia$filelocal" -Destination "$DirDestino\$filelocal" -ErrorAction SilentlyContinue
                if (Test-Path -Path "$DirDestino\$filelocal")
                {
                    $caminhoservidor_ok=$true
                }
                if (-not($caminhoservidor_ok))
                {
                    $url_edeia="https://$servidor/"
                    Write-Verbose "Download file $url_edeia$filelocal para $DirDestino\$filelocal"
                    Start-BitsTransfer -Source "$url_edeia$filelocal" -Destination "$DirDestino\$filelocal" -ErrorAction SilentlyContinue
                    if (Test-Path -Path "$DirDestino\$filelocal")
                    {
                        $caminhoservidor_ok=$true
                    }
                }
            }
            #endregion
            

            $fileremoto="syncfusion.tools.dll", "Syncfusion.Grid.dll", "Syncfusion.Shared.dll", "Menulab.xml"
            foreach ($f in $fileremoto)
            {
                Write-Verbose "Download file http://segilac.no-ip.org/edeia/tools/InstalacaoLocal/$f para $DirDestino\$f"
                Start-BitsTransfer -Source "http://segilac.no-ip.org/edeia/tools/InstalacaoLocal/$f" -Destination "$DirDestino\$f"
                #Write-Output "http://192.168.111.1/edeia/tools/InstalacaoLocal/$f"
            }

            #abrir o menulab.xml para definir o servidor
            if ($caminhoservidor_ok)
            {
                $fileMenulab_xml="$DirDestino\menulab.xml"

                if (Test-Path -Path $fileMenulab_xml)
                {
                    Write-Verbose "Editar menulab.xml"
                    [xml]$XmlDocument = Get-Content -Path $fileMenulab_xml

                    $XmlDocument.Configuracao.UrlServidor=$url_edeia
                    $XmlDocument.Save($fileMenulab_xml)
                }
            }

             Write-Host "Tempo: $((Get-Date).Subtract($start_time).Hours) horas, $((Get-Date).Subtract($start_time).Minutes) minutos $((Get-Date).Subtract($start_time).Seconds) segundos"   
            
            #testar se 64 se 32
            $32_ou_64=(Get-WmiObject Win32_OperatingSystem).OSArchitecture

            #region Crystal Reports

            $f=""
            $start_time = Get-Date
            #instalar o crystal
            if ( $32_ou_64.StartsWith("64"))
            {
                #instalar 64 bits
                $start_time = Get-Date
                $fileremoto="CrystalReportsEngine200804x64.msi","CRRedist2008_x64.msi", "CRRuntime_64bit_13_0_8.msi"
                foreach ($f in $fileremoto)
                {   
                    if (-not (Test-Path -Path  "$DirDestino\$f"))
                    {
                        Write-Verbose "Download http://segilac.no-ip.org/edeia/tools/InstalacaoLocal/$f para $DirDestino\$f"
                        Start-BitsTransfer -Source "http://segilac.no-ip.org/edeia/tools/InstalacaoLocal/$f" -Destination "$DirDestino\$f"           
                    }
                    #Write-Output "http://192.168.111.1/edeia/tools/InstalacaoLocal/$f"
                    # deploy Crystal Reports
                    Write-Verbose "Instalar $DirDestino\$f"
                    Start-Process "$DirDestino\$f" /qn -Wait -Verbose
                    Write-Host "Tempo: $((Get-Date).Subtract($start_time).Hours) horas, $((Get-Date).Subtract($start_time).Minutes) minutos $((Get-Date).Subtract($start_time).Seconds) segundos" 
                }
            }
            else
            {
                 #instalar 32 bits
                $fileremoto="Crystal.Net2.112007.msi","CRRedist2008_x86.msi", "CRRuntime_32bit_13_0_8.msi"
                $start_time = Get-Date
                foreach ($f in $fileremoto)
                {  
                    if (-not (Test-Path -Path  "$DirDestino\$f"))
                        {  
                             Write-Verbose "Download http://segilac.no-ip.org/edeia/tools/InstalacaoLocal/$f para $DirDestino\$f"
                            Start-BitsTransfer -Source "http://segilac.no-ip.org/edeia/tools/InstalacaoLocal/$f" -Destination "$DirDestino\$f" 
                
                        }
                    # deploy Crystal Reports
                    Write-Verbose "Instalar $DirDestino\$f"
                    Start-Process "$DirDestino\$f" /qn -Wait -Verbose
                    Write-Host "Tempo: $((Get-Date).Subtract($start_time).Hours) horas, $((Get-Date).Subtract($start_time).Minutes) minutos $((Get-Date).Subtract($start_time).Seconds) segundos" 
                }
            }
            
            #endregion


            #Criar atalho ambiente de trabalho
            $WshShell = New-Object -comObject WScript.Shell
            $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\e-DeiaLab.lnk")
            $Shortcut.TargetPath = "$DirDestino\menulab.exe"
            $Shortcut.Save()


            #copiar fonte cod-39
            $f="Code-39-20.ttf"
            
            if(-not (Test-Path -Path "$env:windir\fonts\$f"))
            {
                Write-Verbose "Download Font e instalar $DirDestino\$f"
                Start-BitsTransfer -Source "http://segilac.no-ip.org/edeia/tools/InstalacaoLocal/$f" -Destination "$DirDestino\$f" 

                $FONTS = 0x14
                $objShell = New-Object -ComObject Shell.Application
                $objFolder = $objShell.Namespace($FONTS)
                $objFolder.CopyHere("$DirDestino\$f")
            }
            #$objFolder.CopyHere("$DirDestino\$f")


            #Arrancar com o e-DeiaLab
            if ($caminhoservidor_ok)
            {
                Start-Process "$DirDestino\menulab.exe"

            }
            else
            {
                Write-Error "Caminho servidor e-DeiaLab falhou - $url_edeia"
            }
            Write-Host "Tempo: $((Get-Date).Subtract($start_timeT).Hours) horas, $((Get-Date).Subtract($start_timeT).Minutes) minutos $((Get-Date).Subtract($start_timeT).Seconds) segundos" 
            Write-Verbose "Instalação terminada"
    }
    End
    {
    }
}