Automatiser les URL de lancement de ConnectWise ScreenConnect avec PowerShell

Principaux points à retenir

  • Efficacité automatisée: Automatise la génération d’URL de ConnectWise ScreenConnect, améliorant ainsi l’efficacité opérationnelle.
  • Flexibilité des paramètres: Prend en charge les configurations dynamiques grâce à des paramètres tels que le domaine, le groupe de session et l’identifiant de l’instance.
  • Exigence administrative: Nécessite des privilèges d’administrateur pour la modification des champs personnalisés et l’accès au registre.
  • Vérification de l’installation: Vérifie l’installation de ScreenConnect à l’aide du registre du système, ce qui garantit l’exécution ciblée du script.
  • Construction d’un URL direct: Génère des URL de lancement direct pour chaque instance ScreenConnect, minimisant ainsi les saisies manuelles.
  • Potentiel d’intégration: S’intègre facilement dans des flux de travail d’automatisation informatique plus vastes, offrant ainsi une certaine évolutivité.
  • Considérations relatives à la sécurité: Souligne la nécessité de sécuriser l’utilisation des scripts afin d’éviter tout accès non autorisé.
  • Synergie avec NinjaOne: Démontre l’intégration potentielle et les gains d’efficacité avec NinjaOne pour la gestion à distance des systèmes.

Dans le domaine dynamique de l’informatique, la capacité à gérer et à soutenir efficacement les systèmes à distance est primordiale. Un acteur clé dans ce domaine est ConnectWise ScreenConnect, une célèbre solution d’assistance, d’accès et de réunion à distance. L’automatisation de son déploiement et de son intégration au moyen de scripts PowerShell améliore l’efficacité et la fiabilité, une nécessité pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP).

Contexte

Le script en question est conçu pour automatiser la récupération des URL de lancement de ConnectWise ScreenConnect et les enregistrer dans un champ personnalisé. Cette automatisation est cruciale pour les environnements informatiques où l’accès à distance rapide et simple à plusieurs machines est une exigence quotidienne. La capacité du script à identifier des instances spécifiques de ScreenConnect et à générer des URL de connexion directe permet de gagner un temps précieux et de réduire les erreurs manuelles, ce qui en fait un outil essentiel pour l’assistance et la gestion informatiques.

Le script PowerShell :

<#
.SYNOPSIS
    Get ConnectWise ScreenConnect Launch URL and save to custom field (defaults to screenconnectUrl). Requires the domain used for ScreenConnect and a Session Group the machine is a part of to successfully build URL.
.DESCRIPTION
    Get ConnectWise ScreenConnect Launch URL and save to custom field (defaults to screenconnectUrl). 
    Requires the domain used for ScreenConnect and a Session Group the machine is a part of to successfully build URL.
.EXAMPLE
    -ScreenConnectDomain "replace.me" -InstanceID "1111111111"

    Building Launch URL(s)...
    Launch URL(s) Created


    Instance  : 1111111111
    LaunchURL : https://replace.me/Host#Access/All%20Machines//555555-555-555-5555-55555/Join
    SessionId : 555555-555-555-5555-55555

PARAMETER: -ScreenConnectDomain "ExampleInput"
    The domain used for your Connectwise ScreenConnect Instance.

PARAMETER: -SessionGroup "ExampleInput"
    The Session Group in which the machine would normally be found. Defaults to "All Machines".

PARAMETER: -InstanceID "ExampleInput"
    The Instance ID for your instance of ScreenConnect. Used to differentiate between multiple installed ScreenConnect Instances.
    To get the instance id you can see it in the program's name in Control Panel e.g. ScreenConnect Client (yourinstanceidishere) 
    or in ScreenConnect itself (Admin > Advanced > Server Information > Instance Identifier Fingerprint).

PARAMETER: -CustomField "ReplaceWithAnyMultilineCustomField"
    The custom field you would like to write the results to. Defaults to screenconnectUrl

.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 7+, Server 2008+
    Release Notes: Initial Release
By 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.
    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. 
    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. 
    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. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, 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. 
    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. 
    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. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]$ScreenConnectDomain,
    [Parameter()]
    [String]$SessionGroup = "All Machines",
    [Parameter()]
    [String]$InstanceID,
    [Parameter()]
    [String]$CustomField = "screenconnectUrl"
)

begin {
    if ($env:screenconnectDomain -and $env:screenconnectDomain -notlike "null") { $ScreenConnectDomain = $env:screenconnectDomain }
    if ($env:sessionGroup -and $env:sessionGroup -notlike "null") { $SessionGroup = $env:sessionGroup }
    if ($env:instanceId -and $env:instanceId -notlike "null") { $InstanceID = $env:instanceId }
    if ($env:customFieldName -and $env:customFieldName -notlike "null") { $CustomField = $env:customFieldName }

    # Warn end-user if we're not provided an instance id
    if (-not ($InstanceID)) {
        Write-Warning "Without the instance id we will be unable to tell which ScreenConnect instance is yours if multiple are installed resulting in the wrong URL being displayed."
        Write-Warning "To get the instance id you can see it in the programs name in Control Panel ex. ScreenConnect Client (yourinstanceidishere) or in Control itself (Admin > Advanced > Server Information > Instance Identifier Fingerprint)"
    }

    # These two are actually necessary to build the URL
    if (-not ($ScreenConnectDomain) -or -not ($SessionGroup)) {
        Write-Error "Unable to build URL without the domain or Session Group."
        exit 1
    }

    # Test for elevation
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    # Checks the two Uninstall registry keys to see if the app is installed. Needs the name as it would appear in Control Panel.
    function Find-UninstallKey {
        [CmdletBinding()]
        param (
            [Parameter(ValueFromPipeline = $True)]
            [String]$DisplayName,
            [Parameter()]
            [Switch]$UninstallString
        )
        process {
            $UninstallList = New-Object System.Collections.Generic.List[Object]

            $Result = Get-ChildItem HKLM:SoftwareWow6432NodeMicrosoftWindowsCurrentVersionUninstall* | Get-ItemProperty | Where-Object { $_.DisplayName -like "*$DisplayName*" }
            if ($Result) { $UninstallList.Add($Result) }

            $Result = Get-ChildItem HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* | Get-ItemProperty | Where-Object { $_.DisplayName -like "*$DisplayName*" }
            if ($Result) { $UninstallList.Add($Result) }

            # Programs don't always have an uninstall string listed here so to account for that I made this optional.
            if ($UninstallString) {
                $UninstallList | Select-Object -ExpandProperty UninstallString -ErrorAction SilentlyContinue
            }
            else {
                $UninstallList
            }
        }
    }

    # Define the name of the software we are searching for and look for it in both the 64 bit and 32 bit registry nodes.
    if (-not $InstanceID) { $SoftwareName = "ScreenConnect Client" }else { $SoftwareName = "ScreenConnect Client ($InstanceID)" }
    $ControlInstallation = Find-UninstallKey -DisplayName $SoftwareName

    # If its not installed lets error out.
    if (-not ($ControlInstallation)) {
        Write-Error "Connectwise ScreenConnect is not installed!"
        exit 1
    }

    # Elevation is required to write to custom fields. 
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
}
process {
    # The Image Path Registry Key contains the unique session id needed to generate the URL
    Write-Host "Building Launch URL(s)..."
    $ControlInstances = $ControlInstallation.DisplayName | ForEach-Object {
        $ImagePath = Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices$_" | Select-Object -Property ImagePath -ExpandProperty ImagePath
        $Id = ($ImagePath -split '&' | Where-Object { $_ -match 's=(.*-){4}' }) -replace "s="
        $Instance = ($_ -replace "ScreenConnect Client (" -replace ")").trim()
        New-Object psobject -Property @{
            Instance  = $Instance
            LaunchURL = [URI]::EscapeUriString("https://$ScreenConnectDomain/Host#Access/$SessionGroup//$Id/Join")
            SessionId = $Id
        }
    }

    # Create a Table/List of our results 
    Write-Host "Launch URL(s) Created"
    $ControlInstances | Format-List -Property Instance, LaunchURL, SessionId | Out-String | Write-Host

    # PowerShell 2.0 does not support ninjarmm-cli
    if ($PSVersionTable.PSVersion.Major -gt 2) {
        if ($ControlInstances.LaunchURL.Count -gt 1) {
            Ninja-Property-Set -Name $CustomField -Value ($ControlInstances | Format-List -Property Instance, LaunchURL | Out-String)
        }
        else {
            Ninja-Property-Set -Name $CustomField -Value ($ControlInstances.LaunchURL | Out-String)
        }
    }
    else {
        Write-Host "ninjarmm-cli does not support PowerShell 1 & 2. Refer to https://ninjarmm.zendesk.com/hc/en-us/articles/4405408656013 ."
    }
}
end {
    
    
    
}

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenir l’accès

Description détaillée

  • Initialisation des paramètres : Le script commence par définir des paramètres tels que ScreenConnectDomain, SessionGroup, InstanceID et CustomField. Ces paramètres sont essentiels pour identifier l’instance ScreenConnect spécifique et le groupe de machines qu’elle contient.
  • Contrôle des variables d’environnement : Il vérifie et utilise les variables d’environnement si elles sont définies. Cette flexibilité permet une adaptation dynamique aux différentes configurations du système.
  • Vérifications avant exécution : Le script s’assure que les paramètres nécessaires sont fournis et vérifie les privilèges administratifs, car la modification des champs personnalisés nécessite des autorisations élevées.
  • Vérification de l’installation du logiciel: Il recherche dans le registre du système si ScreenConnect est installé et identifie l’instance correcte à l’aide de l’identifiant d’instance fourni.
  • Génération d’URL: La fonctionnalité principale consiste à construire l’URL de lancement de ScreenConnect à l’aide du domaine, du groupe de sessions et d’un identifiant de session unique extrait du registre du système.
  • Formatage des résultats: Les URL générés sont formatés en une liste lisible, fournissant à l’utilisateur des informations claires et exploitables.

Cas d’utilisation potentiels

Imaginez un professionnel de l’informatique qui gère un parc de machines réparties sur plusieurs sites. Il doit pouvoir se connecter rapidement à n’importe quelle machine pour la dépanner. À l’aide de ce script, ils peuvent générer des URL ScreenConnect directes pour chaque machine et les stocker dans un champ personnalisé, ce qui permet un accès à distance instantané sans création manuelle d’URL.

Comparaisons

Traditionnellement, la génération d’URL ScreenConnect implique l’identification manuelle de l’ID de session de chaque machine et la création de l’URL. Ce script automatise ce processus, ce qui réduit considérablement le temps et le risque d’erreur. Par rapport aux méthodes basées sur l’interface graphique, le script offre des capacités d’évolutivité et d’intégration avec d’autres flux de travail automatisés.

FAQ

  • Comment ce script s’assure-t-il qu’il cible la bonne instance de ScreenConnect ?
    Le script utilise le paramètre InstanceID pour identifier l’instance ScreenConnect correcte.
  • Ce script peut-il être intégré dans des flux de travail automatisés plus grands ?
    Oui, sa nature PowerShell lui permet de s’intégrer facilement dans des systèmes d’automatisation informatique plus vastes.
  • L’exécution de ce script nécessite-t-elle des droits d’administrateur ?
    Oui, puisqu’il s’agit d’écrire dans des champs personnalisés et d’accéder aux registres du système.

Implications

L’automatisation de la génération d’URL améliore l’efficacité opérationnelle, mais présente également un risque en cas d’utilisation abusive. Si un accès non autorisé au script se produit, cela peut entraîner des failles de sécurité potentielles. Il est donc essentiel de sécuriser le script et l’environnement dans lequel il est utilisé.

Recommandations

  • Sécuriser l’environnement: Exécutez le script dans un environnement sécurisé et contrôlé.
  • Mises à jour régulières: Maintenez l’environnement ConnectWise ScreenConnect et PowerShell à jour.
  • Contrôle d’accès: Limitez l’accès aux scripts aux personnes autorisées.

Conclusion

L’intégration de tels scripts dans la plateforme NinjaOne peut simplifier et optimiser les tâches de gestion à distance, offrant ainsi une expérience de gestion plus cohérente et plus efficace. La capacité de NinjaOne à s’intégrer à des outils tels que ConnectWise ScreenConnect, renforcée par la puissance de l’automatisation, témoigne de son utilité dans ce monde informatique en constante évolution.

Pour aller plus loin

Créer une équipe informatique efficace et performante nécessite une solution centralisée qui soit l’outil principal pour fournir vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu’ils soient, sans avoir besoin d’une infrastructure complexe sur site.

Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée ou commencez votre essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

Voir la démo×
×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton « J’accepte » ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni « tel quel » et « tel que disponible », sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).