{"id":816971,"date":"2026-06-02T16:03:10","date_gmt":"2026-06-02T16:03:10","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=816971"},"modified":"2026-06-02T16:03:10","modified_gmt":"2026-06-02T16:03:10","slug":"automatizar-a-implantacao-da-conexao-por-tela-com-o-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/pt-br\/script-hub\/automatizar-a-implantacao-da-conexao-por-tela-com-o-powershell\/","title":{"rendered":"Automatizar a implanta\u00e7\u00e3o do ConnectWise ScreenConnect com o PowerShell"},"content":{"rendered":"<h2>Principais conclus\u00f5es<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Efici\u00eancia automatizada<\/strong>: O script do PowerShell para instalar o ConnectWise ScreenConnect automatiza e simplifica o processo de implementa\u00e7\u00e3o, aumentando a efici\u00eancia operacional.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>Instala\u00e7\u00e3o personaliz\u00e1vel<\/strong>: Ele suporta a constru\u00e7\u00e3o din\u00e2mica de URLs para instala\u00e7\u00f5es personalizadas com base em par\u00e2metros como nome da organiza\u00e7\u00e3o, local e tipo de dispositivo.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>Ampla aplicabilidade<\/strong>: Ideal para MSPs e profissionais de TI que gerenciam v\u00e1rios dispositivos em diversos locais.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><strong>Recursos avan\u00e7ados<\/strong>: Oferece recursos como verifica\u00e7\u00f5es de status de instala\u00e7\u00e3o e registro de erros, superando os m\u00e9todos tradicionais de script manual ou em lote.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><strong>Compatibilidade e limita\u00e7\u00f5es<\/strong>: Funciona melhor com o Windows 8 e o Server 2012 em diante, com poss\u00edveis limita\u00e7\u00f5es em vers\u00f5es mais antigas.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"6\" data-aria-level=\"1\"><strong>Considera\u00e7\u00f5es sobre seguran\u00e7a<\/strong>: Os usu\u00e1rios devem revisar e entender o script para garantir a seguran\u00e7a, especialmente em ambientes MSP.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"7\" data-aria-level=\"1\"><strong>Integra\u00e7\u00e3o com o NinjaOne<\/strong>: Esse script se alinha bem com a abordagem de gerenciamento unificado de TI da NinjaOne, oferecendo uma solu\u00e7\u00e3o coesa para os profissionais de TI.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"8\" data-aria-level=\"1\"><strong>Adapta\u00e7\u00e3o cont\u00ednua<\/strong>: Podem ser necess\u00e1rias atualiza\u00e7\u00f5es e modifica\u00e7\u00f5es regulares no script para alinh\u00e1-lo com as vers\u00f5es mais recentes do ConnectWise ScreenConnect.<\/li>\n<\/ul>\n<p>No cen\u00e1rio din\u00e2mico da TI, a efici\u00eancia e a automa\u00e7\u00e3o s\u00e3o fundamentais para manter uma vantagem competitiva. A cria\u00e7\u00e3o de scripts surgiu como uma ferramenta crucial, permitindo que os profissionais de TI otimizem processos complexos. O script do PowerShell para instalar o ConnectWise ScreenConnect \u00e9 um exemplo disso, oferecendo uma solu\u00e7\u00e3o sofisticada para gerenciamento e suporte remotos.<\/p>\n<h2>Hist\u00f3rico<\/h2>\n<p><a href=\"https:\/\/www.ninjaone.com\/pt-br\/integracoes\/connectwise-screenconnect\/\">O ConnectWise ScreenConnect<\/a>, uma popular ferramenta de gerenciamento e suporte remoto, \u00e9 amplamente utilizado por profissionais de TI e <a href=\"https:\/\/www.ninjaone.com\/what-is-an-msp\/\">provedores de servi\u00e7os gerenciados (MSPs)<\/a>. Sua capacidade de facilitar o acesso remoto aos dispositivos \u00e9 essencial nos ambientes de trabalho cada vez mais descentralizados de hoje. Esse script do PowerShell simplifica o processo de implanta\u00e7\u00e3o do ScreenConnect, abordando um desafio comum enfrentado pelas equipes de TI: instala\u00e7\u00e3o de software eficiente, dimension\u00e1vel e automatizada.<\/p>\n<h2>O roteiro:<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">&lt;#\r\n.SYNOPSIS\r\nDownload and Install ConnectWise ScreenConnect from the domain used for ScreenConnect. Supports automatic customization of the device type, location and other ScreenConnect Fields.\r\n\r\n.DESCRIPTION\r\nDownload and Install ConnectWise ScreenConnect from the domain used for ScreenConnect. Supports automatic customization of the device type, location and other ScreenConnect Fields.\r\n\r\n.EXAMPLE\r\n-ScreenConnectDomain \"testscreen.screenconnect.com\" -UseOrgName -UseLocation -UseDeviceType\r\n\r\nInstaller Log File location will be: C:WindowsTEMPtmp9A50.tmp\r\nScreenConnect Client (abcd123456) is not installed and will be installed.\r\nAttempting to build from domain...\r\nURL Built: https:\/\/testscreen.screenconnect.com\/Bin\/Test Company.ClientSetup.msi?e=Access&amp;y=Guest&amp;c=Kyle - OOB&amp;c=Main Office&amp;c=&amp;c=Workstation&amp;c=&amp;c=&amp;c=&amp;c=\r\nURL Given, Downloading the file...\r\nDownload Attempt 1\r\nExit Code: 0\r\nSuccess\r\n\r\nPRESET PARAMETER: -ScreenConnectDomain \"your.domain.com\"\r\nYour ScreenConnect instance's domain name. The script will use this to construct a download URL from scratch with the options you selected.\r\n\r\nPRESET PARAMETER: -UseOrgName\r\nModifies your URL to use the organization name in the Company Name Field in ScreenConnect.\r\n\r\nPRESET PARAMETER: -UseLocation\r\nModifies your URL to use the Location Name in the Site Name Field in ScreenConnect.\r\n\r\nPRESET PARAMETER: -UseDeviceType\r\nModifies your URL to include the type of device in ScreenConnect. (Server, Workstation, Laptop etc.)\r\n\r\nPRESET PARAMETER: -Department \"Your Department Name Here\"\r\nModifies your URL to include your desired department name in ScreenConnect.\r\n\r\nPRESET PARAMETER: -SkipSleep\r\nBy default the script sleeps for a random interval between 3 and 60 seconds prior to downloading the file. This parameter skips the sleep.\r\n\r\nPRESET PARAMETER: -Force\r\nIf ScreenConnect is already installed attempt to install it anyways.\r\n\r\n.NOTES\r\nMinimum OS Architecture Supported: Windows 8, Windows Server 2012\r\nCan work on lower versions of Windows, provided that the OS\/.NET is able to download the file. PowerShell 2.0 might face issues due to its lack of TLS support in .NET 2.0.\r\n\r\nAdapted from Chris White's script: https:\/\/ninjarmm.zendesk.com\/hc\/en-us\/community\/posts\/7549797399821-Connectwise-Control-Installer\r\n\r\nRelease Notes: Initial Release\r\nBy using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n    Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n#&gt;\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    # Change the defaults if you don't wish to use parameters when running this script\r\n    [Parameter()]\r\n    [String]$MSI = \"ClientSetup.msi\",\r\n    [Parameter()]\r\n    [String]$DestinationFolder = \"$env:TEMP\",\r\n    [Parameter()]\r\n    [String]$ScreenConnectDomain,\r\n    [Parameter()]\r\n    [String]$InstanceID,\r\n    [Parameter()]\r\n    [Switch]$UseOrgName = [System.Convert]::ToBoolean($env:useNinjaOrganizationName),\r\n    [Parameter()]\r\n    [Switch]$UseLocation = [System.Convert]::ToBoolean($env:useNinjaLocationName),\r\n    [Parameter()]\r\n    [Switch]$UseDeviceType = [System.Convert]::ToBoolean($env:addDeviceType),\r\n    [Parameter()]\r\n    [String]$Department,\r\n    [Parameter()]\r\n    [Switch]$SkipSleep = [System.Convert]::ToBoolean($env:skipSleep),\r\n    [Parameter()]\r\n    [Switch]$Force = [System.Convert]::ToBoolean($env:force)\r\n)\r\nbegin {\r\n    # If Script Form is used replace the parameters with what was filled in.\r\n    if ($env:screenconnectDomainName -and $env:screenconnectDomainName -notlike \"null\") { $ScreenConnectDomain = $env:screenconnectDomainName }\r\n    if ($env:department -and $env:department -notlike \"null\") { $Department = $env:department }\r\n\r\n    # Some means of installing the file is required.\r\n    if (-not ($ScreenConnectDomain)) { Write-Error \"A domain is required to install control.\"; exit 1 }\r\n\r\n    if ($ScreenConnectDomain -match \"^http(s)?:\/\/\") {\r\n        Write-Warning \"http(s):\/\/ is not part of the domain name. Removing http(s):\/\/ from your input....\"\r\n        $ScreenConnectDomain = $ScreenConnectDomain -replace \"^http(s)?:\/\/\"\r\n        Write-Warning \"New Domain Name $ScreenConnectDomain.\"\r\n    }\r\n\r\n    if ($ScreenConnectDomain -match \"^C:\/\") {\r\n        Write-Error \"It looks like you entered in a file path by mistake. We actually need the domain name used to reach your ScreenConnect website for example 'companyname.screenconnect.com'\"\r\n        exit 1\r\n    }\r\n    \r\n    #### Helper functions used throughout the script ####\r\n\r\n    function Test-IsElevated {\r\n        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()\r\n        $p = New-Object System.Security.Principal.WindowsPrincipal($id)\r\n        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)\r\n    }\r\n\r\n    # Extract the ProductName from the msi\r\n    function Get-ControlPanelName {\r\n        [CmdletBinding()]\r\n        param (\r\n            [Parameter()]\r\n            [string]$msiPath\r\n        )\r\n        $windowsInstaller = New-Object -ComObject WindowsInstaller.Installer\r\n        $database = $windowsInstaller.GetType().InvokeMember(\"OpenDatabase\", \"InvokeMethod\", $null, $windowsInstaller, @($msiPath, 0))\r\n        $query = \"SELECT `Value` FROM `Property` WHERE `Property` = 'ProductName'\"\r\n\r\n        $view = $database.GetType().InvokeMember(\"OpenView\", \"InvokeMethod\", $null, $database, $query)\r\n        $view.GetType().InvokeMember(\"Execute\", \"InvokeMethod\", $null, $view, $null)\r\n\r\n        $record = $view.GetType().InvokeMember(\"Fetch\", \"InvokeMethod\", $null, $view, $null)\r\n        if ($record) {\r\n            return $record.GetType().InvokeMember(\"StringData\", \"GetProperty\", $null, $record, 1)\r\n        }\r\n\r\n        [System.Runtime.InteropServices.Marshal]::ReleaseComObject($windowsInstaller) | Out-Null\r\n        [System.GC]::Collect()\r\n    }\r\n\r\n    # Is it a Server or Desktop OS?\r\n    function Get-ProductType {\r\n        if ($PSVersionTable.PSVersion.Major -ge 5) {\r\n            $OS = Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object ProductType -ExpandProperty ProductType\r\n        }\r\n        else {\r\n            $OS = Get-WmiObject -Class Win32_OperatingSystem | Select-Object ProductType -ExpandProperty ProductType\r\n        }\r\n        \r\n        return $OS\r\n    }\r\n\r\n    # Check the Chassis type to find out if it's a laptop or not.\r\n    function Test-IsLaptop {\r\n        if ($PSVersionTable.PSVersion.Major -ge 5) {\r\n            $Chassis = Get-CimInstance -ClassName win32_systemenclosure | Select-Object ChassisTypes -ExpandProperty ChassisTypes\r\n        }\r\n        else {\r\n            $Chassis = Get-WmiObject -Class win32_systemenclosure | Select-Object ChassisTypes -ExpandProperty ChassisTypes\r\n        }\r\n\r\n        switch ($Chassis) {\r\n            9 { return $True }\r\n            10 { return $True }\r\n            14 { return $True }\r\n            default { return $False }\r\n        }\r\n    }\r\n\r\n    # Check's the two uninstall registry keys to see if the app is installed. Needs the name as it would appear in Control Panel.\r\n    function Find-UninstallKey {\r\n        [CmdletBinding()]\r\n        param (\r\n            [Parameter(ValueFromPipeline = $True)]\r\n            [String]$DisplayName,\r\n            [Parameter()]\r\n            [Switch]$UninstallString\r\n        )\r\n        process {\r\n            $UninstallList = New-Object System.Collections.Generic.List[Object]\r\n\r\n            $Result = Get-ChildItem HKLM:SoftwareWow6432NodeMicrosoftWindowsCurrentVersionUninstall* | Get-ItemProperty | Where-Object { $_.DisplayName -like \"*$DisplayName*\" }\r\n            if ($Result) { $UninstallList.Add($Result) }\r\n\r\n            $Result = Get-ChildItem HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* | Get-ItemProperty | Where-Object { $_.DisplayName -like \"*$DisplayName*\" }\r\n            if ($Result) { $UninstallList.Add($Result) }\r\n\r\n            # Programs don't always have an uninstall string listed here so to account for that I made this optional.\r\n            if ($UninstallString) {\r\n                $UninstallList | Select-Object -ExpandProperty UninstallString -ErrorAction SilentlyContinue\r\n            }\r\n            else {\r\n                $UninstallList\r\n            }\r\n        }\r\n    }\r\n\r\n    # Handy download function\r\n    function Invoke-Download {\r\n        param(\r\n            [Parameter()]\r\n            [String]$URL,\r\n            [Parameter()]\r\n            [String]$Path,\r\n            [Parameter()]\r\n            [Switch]$SkipSleep\r\n        )\r\n        Write-Host \"URL given; downloading the file...\"\r\n\r\n        $SupportedTLSversions = [enum]::GetValues('Net.SecurityProtocolType')\r\n        if ( ($SupportedTLSversions -contains 'Tls13') -and ($SupportedTLSversions -contains 'Tls12') ) {\r\n            [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol::Tls13 -bor [System.Net.SecurityProtocolType]::Tls12\r\n        }\r\n        elseif ( $SupportedTLSversions -contains 'Tls12' ) {\r\n            [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12\r\n        }\r\n        else {\r\n            # Not everything requires TLS 1.2, but we'll try anyways.\r\n            Write-Warning \"TLS 1.2 and or TLS 1.3 isn't supported on this system. This download may fail!\"\r\n            if ($PSVersionTable.PSVersion.Major -lt 3) {\r\n                Write-Warning \"PowerShell 2 \/ .NET 2.0 doesn't support TLS 1.2.\"\r\n            }\r\n        }\r\n\r\n        $i = 1\r\n        While ($i -lt 4) {\r\n            if (-not ($SkipSleep)) {\r\n                $SleepTime = Get-Random -Minimum 3 -Maximum 30\r\n                Start-Sleep -Seconds $SleepTime\r\n            }\r\n\r\n            Write-Host \"Download Attempt $i\"\r\n\r\n            try {\r\n                $WebClient = New-Object System.Net.WebClient\r\n                $WebClient.DownloadFile($URL, $Path)\r\n                $File = Test-Path -Path $Path -ErrorAction SilentlyContinue\r\n            }\r\n            catch {\r\n                Write-Warning \"An error has occurred while downloading!\"\r\n                Write-Warning $_.Exception.Message\r\n            }\r\n\r\n            if ($File) {\r\n                $i = 4\r\n            }\r\n            else {\r\n                $i++\r\n            }\r\n        }\r\n\r\n        if (-not (Test-Path $Path)) {\r\n            Write-Error \"Failed to download file!\"\r\n            Exit 1\r\n        }\r\n    }\r\n\r\n    # This will build our screenconnect download url if only given a domain name or if modification is needed to include the device type, location, org name etc.\r\n    function Build-URL {\r\n        param(\r\n            [Parameter()]\r\n            [String]$BaseURL,\r\n            [Parameter()]\r\n            [String]$Domain,\r\n            [Parameter()]\r\n            [String]$MSI,\r\n            [Parameter()]\r\n            [String]$Department,\r\n            [Parameter()]\r\n            [Switch]$UseOrgName,\r\n            [Parameter()]\r\n            [Switch]$UseLocation,\r\n            [Parameter()]\r\n            [Switch]$UseDeviceType\r\n        )\r\n\r\n        Write-Host \"Attempting to build from domain...\"\r\n        $URL = \"https:\/\/$Domain\/Bin\/$env:NINJA_COMPANY_NAME.ClientSetup.msi`?e=Access&amp;y=Guest\"\r\n\r\n        if ($UseOrgName) { $URL = $URL + \"&amp;c=$env:NINJA_ORGANIZATION_NAME\" }else { $URL = $URL + \"&amp;c=\" }\r\n        if ($UseLocation) { $URL = $URL + \"&amp;c=$env:NINJA_LOCATION_NAME\" }else { $URL = $URL + \"&amp;c=\" }\r\n        if ($Department) { $URL = $URL + \"&amp;c=$Department\" }else { $URL = $URL + \"&amp;c=\" }\r\n        if ($UseDeviceType) {\r\n            switch (Get-ProductType) {\r\n                1 { if (Test-IsLaptop) { $URL = $URL + \"&amp;c=Laptop&amp;c=&amp;c=&amp;c=&amp;c=\" }else { $URL = $URL + \"&amp;c=Workstation&amp;c=&amp;c=&amp;c=&amp;c=\" } }\r\n                2 { $URL = $URL + \"&amp;c=Domain Controller&amp;c=&amp;c=&amp;c=&amp;c=\" }\r\n                3 { $URL = $URL + \"&amp;c=Server&amp;c=&amp;c=&amp;c=&amp;c=\" }\r\n            }\r\n        }\r\n        else {\r\n            $URL = $URL + \"&amp;c=&amp;c=&amp;c=&amp;c=&amp;c=\"\r\n        }\r\n\r\n        Write-Host \"URL Built: $URL\"\r\n\r\n        return $URL\r\n    }\r\n\r\n    if (-not (Test-IsElevated)) {\r\n        Write-Error -Message \"Access Denied. Please run with Administrator privileges.\"\r\n        exit 1\r\n    }\r\n\r\n    if (-not (Test-Path $DestinationFolder -ErrorAction SilentlyContinue)) {\r\n        Write-Host \"Destination Folder does not exist! Creating directory...\"\r\n        New-Item $DestinationFolder -ItemType Directory\r\n    }\r\n\r\n    #Set the log file as a temporary file, it will be created in the temp folder of the context the script runs in (c:windowstemp or c:usersusernameappdatatemp)\r\n    $InstallerLogFile = [IO.Path]::GetTempFileName()\r\n    Write-Host \"Installer Log File location will be: $InstallerLogFile\"\r\n}\r\nprocess {\r\n    # Arguments required to download the file\r\n    $DownloadArgs = @{ Path = \"$DestinationFolder$MSI\" }\r\n    if ($SkipSleep) { $DownloadArgs[\"SkipSleep\"] = $True }\r\n\r\n    # Build the arguments needed to create the url\r\n    $ArgumentList = @{ Domain = $ScreenConnectDomain }\r\n    if ($UseOrgName) { $ArgumentList[\"UseOrgName\"] = $True }\r\n    if ($UseLocation) { $ArgumentList[\"UseLocation\"] = $True }\r\n    if ($UseDeviceType) { $ArgumentList[\"UseDeviceType\"] = $True }\r\n    if ($Department) { $ArgumentList[\"Department\"] = $Department }\r\n\r\n    # Build the URL and get it ready for download\r\n    $DownloadArgs[\"URL\"] = Build-Url @ArgumentList\r\n\r\n    # Download the installer\r\n    Invoke-Download @DownloadArgs\r\n\r\n    # Grab the installer file\r\n    $InstallerFile = Join-Path -Path $DestinationFolder -ChildPath $MSI -Resolve\r\n\r\n    # Define the name of the software we are searching for and look for it in both the 64 bit and 32 bit registry nodes\r\n    $ProductName = \"$(Get-ControlPanelName -msiPath $InstallerFile)\".Trim()\r\n    if (-not $ProductName) { \r\n        Write-Error \"Failed to fetch the product name from the MSI at path '$InstallerFile'. Ensure the MSI path is correct and the MSI contains the necessary product information.\"\r\n        exit 1\r\n    }\r\n\r\n    # If already installed, exit.\r\n    $IsInstalled = Find-UninstallKey -DisplayName $ProductName\r\n    if ($IsInstalled -and -not ($Force)) {\r\n        Write-Host \"$ProductName is already installed; exiting...\"\r\n        exit 0\r\n    }\r\n\r\n    # ScreenConnect install arguments\r\n    $Arguments = \"\/c msiexec \/i \"\"$InstallerFile\"\" \/qn \/norestart \/l \"\"$InstallerLogFile\"\" REBOOT=REALLYSUPPRESS\"\r\n\r\n    # Install and let the user know the exit code\r\n    $Process = Start-Process -Wait cmd -ArgumentList $Arguments -PassThru\r\n    Write-Host \"Exit Code: $($Process.ExitCode)\";\r\n\r\n    # Interpret the exit code\r\n    switch ($Process.ExitCode) {\r\n        0 { Write-Host \"Success\" }\r\n        3010 { Write-Host \"Success. Reboot required to complete installation\" }\r\n        1641 { Write-Host \"Success. Installer has initiated a reboot\" }\r\n        default {\r\n            Write-Error \"Exit code does not indicate success\"\r\n            Get-Content $InstallerLogFile -ErrorAction SilentlyContinue | Select-Object -Last 50 | Write-Host\r\n        }\r\n    }\r\n\r\n    exit $Process.ExitCode\r\n    \r\n}\r\nend {\r\n    \r\n    \r\n    \r\n}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><p>Acesse mais de 300 scripts no NinjaOne Dojo<\/p>\n<p><a href=\"https:\/\/www.ninjaone.com\/freetrialform\/\">Obter acesso<\/a><\/p>\n<\/div>\n<h2>Detalhamento<\/h2>\n<p>O script funciona de maneira simples:<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Inicializa\u00e7\u00e3o de par\u00e2metros<\/strong>: Ele come\u00e7a definindo par\u00e2metros como o nome do arquivo MSI, a pasta de destino e o dom\u00ednio do ScreenConnect.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>Verifica\u00e7\u00f5es pr\u00e9-execu\u00e7\u00e3o<\/strong>: Ele verifica se h\u00e1 privil\u00e9gios de administrador e a exist\u00eancia da pasta de destino.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>Cria\u00e7\u00e3o de URL din\u00e2mico<\/strong>: Um recurso importante \u00e9 sua capacidade de criar dinamicamente um URL de download com base em par\u00e2metros como nome da organiza\u00e7\u00e3o, local e tipo de dispositivo.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>Processo de download<\/strong>: Em seguida, o script faz o download do instalador do ScreenConnect a partir do URL constru\u00eddo.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>Instala\u00e7\u00e3o<\/strong>: Ap\u00f3s o download, ele verifica se o ScreenConnect j\u00e1 est\u00e1 instalado. Caso contr\u00e1rio, ou se o par\u00e2metro Force for usado, ele prossegue com a instala\u00e7\u00e3o.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>Registro em log<\/strong>: Durante todo o processo, os registros s\u00e3o mantidos para solu\u00e7\u00e3o de problemas.<\/li>\n<\/ul>\n<h2>Casos de uso em potencial<\/h2>\n<p>Imagine um MSP respons\u00e1vel por gerenciar a infraestrutura de TI em v\u00e1rios sites de clientes. A instala\u00e7\u00e3o manual do ScreenConnect em cada dispositivo consumiria muito tempo. Com esse script, o MSP pode automatizar as instala\u00e7\u00f5es, personalizando configura\u00e7\u00f5es como local e tipo de dispositivo para cada cliente, economizando tempo e reduzindo erros.<\/p>\n<h2>Compara\u00e7\u00f5es<\/h2>\n<p>Tradicionalmente, a instala\u00e7\u00e3o do software pode envolver o download e a configura\u00e7\u00e3o manuais em cada dispositivo ou o uso de scripts b\u00e1sicos em lote sem recursos de personaliza\u00e7\u00e3o. Esse script do PowerShell supera esses m\u00e9todos ao oferecer recursos avan\u00e7ados, como constru\u00e7\u00e3o din\u00e2mica de URL e verifica\u00e7\u00f5es de status de instala\u00e7\u00e3o, o que resulta em implementa\u00e7\u00f5es mais eficientes e sem erros.<\/p>\n<h2>Implica\u00e7\u00f5es<\/h2>\n<p>Embora esse script simplifique significativamente o processo de instala\u00e7\u00e3o, os usu\u00e1rios devem estar cientes das implica\u00e7\u00f5es de seguran\u00e7a. O uso ou a modifica\u00e7\u00e3o incorretos podem levar a vulnerabilidades, especialmente em ambientes MSP, em que uma \u00fanica viola\u00e7\u00e3o pode afetar v\u00e1rios clientes.<\/p>\n<h2>Recomenda\u00e7\u00f5es<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><strong>Revis\u00e3o e teste<\/strong>: Sempre revise e teste minuciosamente o script em um ambiente controlado.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><strong>Personalize com cuidado<\/strong>: Modifique os par\u00e2metros do script de acordo com seus requisitos espec\u00edficos.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"6\" data-aria-level=\"1\"><strong>Mantenha-se atualizado<\/strong>: Mantenha-se a par das atualiza\u00e7\u00f5es do ConnectWise ScreenConnect e ajuste o script conforme necess\u00e1rio.<\/li>\n<\/ul>\n<h2>Considera\u00e7\u00f5es finais<\/h2>\n<p>O NinjaOne, com seu foco em <a href=\"https:\/\/www.ninjaone.com\/pt-br\/\">opera\u00e7\u00f5es de TI unificadas<\/a>, complementa essas solu\u00e7\u00f5es de script. Ele oferece uma plataforma em que esses scripts podem ser integrados e gerenciados com efici\u00eancia, aprimorando ainda mais os recursos de gerenciamento de TI dos profissionais. Esse script do PowerShell, juntamente com ferramentas como o NinjaOne, demonstra como a automa\u00e7\u00e3o e as ferramentas inteligentes s\u00e3o indispens\u00e1veis no gerenciamento moderno de TI.<\/p>\n","protected":false},"author":35,"featured_media":193969,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[12460],"class_list":["post-816971","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/script_hub\/816971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/comments?post=816971"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/media\/193969"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/media?parent=816971"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/operating_system?post=816971"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/pt-br\/wp-json\/wp\/v2\/use_cases?post=816971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}