Comment mettre à jour la description des appareils avec PowerShell

La gestion et le maintien d’une convention de dénomination constante pour les actifs informatiques sont essentiels pour optimiser les opérations, garantir l’exactitude de l’inventaire et assurer la conformité. Parmi les différents attributs de métadonnées assignés à un système Windows, la description des appareils est souvent négligée.

Cependant, ce petit élément d’information peut considérablement améliorer la clarté dans les environnements informatiques, en particulier lorsqu’il est intégré à des plateformes de suivi des actifs et de gestion à distance. Dans cet article, nous verrons comment mettre à jour la description des appareils avec PowerShell, un petit changement qui peut améliorer l’efficacité administrative.

Contexte

Dans de nombreux environnements, en particulier ceux qui sont gérés par des fournisseurs de services gérés (MSP) ou des équipes informatiques internes, les métadonnées des appareils jouent un rôle crucial dans l’identification et l’organisation des appareils. Le champ « description de l’appareil » est utilisé pour fournir des informations contextuelles sur l’appareil, telles que sa fonction ou l’utilisateur auquel il a été attribué. Malheureusement, la mise à jour manuelle de cette description par le biais d’interfaces graphiques est inefficace, en particulier à grande échelle.

Ce script PowerShell comble cette lacune en permettant aux professionnels de l’informatique d’automatiser le processus de mise à jour ou d’effacement des descriptions des appareils. En prenant en charge les entrées de variables d’environnement et en validant leur utilisation correcte, il garantit une exécution fiable, qu’elle soit déployée de manière interactive ou par le biais de plateformes de gestion à distance telles que NinjaOne.

Le script

#Requires -Version 4

<#
.SYNOPSIS
    Updates the current device description.
.DESCRIPTION
    Updates the current device description.
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).
.EXAMPLE
    -Description "Kitchen Computer"
    
    Attempting to set device description to 'Kitchen Computer'.


    SystemDirectory : C:\Windows\system32
    Organization    : vm.net
    BuildNumber     : 9600
    RegisteredUser  : NA
    SerialNumber    : 00252-70000-00000-AA382
    Version         : 6.3.9600

    Successfully set device description to 'Kitchen Computer'.


PARAMETER: -Description "ReplaceMeWithADeviceDescription"
    Specify the device description you would like to set.

PARAMETER: -ClearDescription
    Clear the current device description.

.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2012 R2
    Release Notes: Initial Release
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]$Description,
    [Parameter()]
    [Switch]$ClearDescription = [System.Convert]::ToBoolean($env:clearDeviceDescription)
)

begin {
    if($env:deviceDescription -and $env:deviceDescription -notlike "null"){ $Description = $env:deviceDescription }

    # Trim any leading or trailing whitespace from the description, if it exists
    if ($Description) {
        $Description = $Description.Trim()
    }

    # Ensure that a description is provided if clearing the description is not requested
    if (!$Description -and !$ClearDescription) {
        Write-Host -Object "[Error] You must provide a description to set."
        exit 1
    }

    # Ensure that both clearing and setting the description are not requested simultaneously
    if ($ClearDescription -and $Description) {
        Write-Host -Object "[Error] You cannot clear and set the device description at the same time."
        exit 1
    }

    # Clear the description if requested
    if ($ClearDescription) {
        $Description = $Null
    }

    # Measure the length of the description
    $DescriptionLength = $Description | Measure-Object -Character | Select-Object -ExpandProperty Characters
    # Warn if the description is longer than 40 characters
    if ($DescriptionLength -ge 40) {
        Write-Host -Object "[Warning] The description '$Description' is greater than 40 characters. It may appear trimmed in certain situations."
    }

    # Function to check if the script is running with elevated (administrator) privileges
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    if (!$ExitCode) {
        $ExitCode = 0
    }
}
process {
    # Check if the script is running with elevated (administrator) privileges
    if (!(Test-IsElevated)) {
        Write-Host -Object "[Error] Access Denied. Please run with Administrator privileges."
        exit 1
    }

    try {
        Write-Host -Object "Attempting to set device description to '$Description'."
        # Determine the PowerShell version and set the operating system description accordingly
        if ($PSVersionTable.PSVersion.Major -lt 5) {
            # Use Get-WmiObject for PowerShell versions less than 5
            Get-WmiObject -Class Win32_OperatingSystem -ErrorAction Stop | Set-WmiInstance -Property @{ 'Description' = $Description } -ErrorAction Stop
        }
        else {
            # Use Get-CimInstance for PowerShell version 5 or greater
            Get-CimInstance -Class Win32_OperatingSystem -ErrorAction Stop | Set-CimInstance -Property @{ 'Description' = $Description } -ErrorAction Stop
        }
        Write-Host -Object "Successfully set device description to '$Description'."
    }
    catch {
        # Handle any errors that occur while retrieving the device description
        Write-Host -Object "[Error] Failed to set the device description."
        Write-Host -Object "[Error] $($_.Exception.Message)"
        exit 1
    }

    exit $ExitCode
}
end {
    
    
    
}

 

Description détaillée

Examinons le script ligne par ligne pour comprendre son fonctionnement et l’importance de chaque section.

Traitement des paramètres

powershell

CopyEdit

param (

[String]$Description,

[Switch]$ClearDescription = [System.Convert]::ToBoolean($env:clearDeviceDescription)

)

Le script accepte deux paramètres :

  • $Description: La description de l’appareil souhaité.
  • $ClearDescription: Un commutateur pour effacer la description actuelle, éventuellement défini par une variable d’environnement.

Logique de prétraitement

powershell

CopyEdit

if($env:deviceDescription -and $env:deviceDescription -notlike « null »){ $Description = $env:deviceDescription }

Cette ligne vérifie si une description d’appareil est fournie par l’environnement et l’utilise si elle est présente. Il s’assure également que les espaces blancs sont coupés et valide que l’utilisateur n’essaie pas de définir et d’effacer la description simultanément, une erreur courante que le script gère de manière élégante.

Vérification de la longueur de la description

powershell

CopyEdit

$DescriptionLength = $Description | Measure-Object -Character | Select-Object -ExpandProperty Characters

if ($DescriptionLength -ge 40) {

Write-Host -Object « [Warning] … may appear trimmed … »

}

Ici, le script avertit l’utilisateur si la description dépasse 40 caractères – une limite pratique due aux contraintes de rendu de l’interface utilisateur dans de nombreux outils de gestion.

Validation des privilèges

Le script contient une fonction personnalisée, Test-IsElevated, qui permet de vérifier qu’il s’exécute avec des privilèges d’administrateur. C’est essentiel, car l’écriture dans les propriétés du système d’exploitation nécessite des autorisations élevées.

Logique d’exécution principale

Selon la version de PowerShell, le script utilise Set-WmiInstance ou Set-CimInstance pour mettre à jour la propriété Win32_OperatingSystem.Description. Cette bifurcation garantit la compatibilité entre les versions de Windows et les versions de PowerShell.

Gestion des erreurs

Un bloc try-catch performant gère les échecs de manière élégante, en fournissant des informations permettant de diagnostiquer les problèmes sans faire planter le script de manière inattendue.

Cas d’utilisation potentiels

Étude de cas : Un fournisseur de services gérés (MSP) gère plus de 200 terminaux pour différents clients. Chaque machine doit refléter son objectif de déploiement (par exemple, « terminal d’accueil » ou « poste de travail financier »). En intégrant ce script au module de script de NinjaOne et en passant des valeurs via des variables d’environnement, les techniciens peuvent mettre à jour dynamiquement la description des appareils lors de l’intégration ou des audits post-déploiement, améliorant ainsi la visibilité de l’actif dans les tableaux de bord des clients.

Comparaisons

Méthode manuelle avec l’interface graphique

  • Il faut se connecter à chaque appareil.
  • Prend du temps et est source d’erreurs.

Stratégie de groupe

  • Il n’est pas possible de modifier directement le champ de description du système d’exploitation.
  • Options de personnalisation limitées.

Script PowerShell

  • Rapide, automatisé et évolutif.
  • S’intègre facilement dans les plateformes RMM telles que NinjaOne.
  • Prise en charge de l’entrée dynamique via des variables d’environnement.

Questions fréquentes

Q : Puis-je exécuter ce script à distance ?

Oui. Tant que la session est élevée et qu’elle dispose des autorisations nécessaires, elle peut être exécutée via des shells distants ou des plateformes RMM.

Q : Que se passe-t-il si la description de l’appareil est trop longue ?

Le script l’établira quand même, mais un avertissement sera émis. Le rendu de l’interface utilisateur dans certains outils peut la tronquer.

Q : Ce problème persistera-t-il après un redémarrage ?

Oui. La description de l’appareil définie ici est stockée de manière persistante dans WMI et survit aux redémarrages.

Q : Que se passe-t-il si j’essaie de définir et d’effacer la description en même temps ?

Le script se termine par une erreur, ce qui garantit qu’une seule opération est effectuée par exécution.

Implications

La mise à jour de la description du dispositif peut sembler mineure, mais elle a des implications administratives importantes. Des métadonnées précises sur les appareils améliorent l’audit de sécurité, simplifient la gestion de l’inventaire et améliorent les scripts contextuels ou l’application des stratégies. Dans les environnements où les rôles sont attribués de manière dynamique ou réaffectés régulièrement, ce champ permet de connaître rapidement l’utilisation des appareils, ce qui est essentiel pour le dépannage et la conformité.

Recommandations

  • Exécuter en tant qu’administrateur : Exécutez toujours le script avec des privilèges élevés pour éviter les erreurs d’autorisation.
  • Intégration avec les outils RMM : Sautez des paramètres à l’aide de variables d’environnement pour une automatisation optimale.
  • Standardiser les descriptions : Utilisez une convention de dénomination pour assurer la cohérence de votre environnement.
  • Limiter la longueur : Dans la mesure du possible, les descriptions ne doivent pas dépasser 40 caractères afin d’éviter la troncature de l’interface utilisateur.

Conclusion

Ce script PowerShell illustre comment une petite automatisation peut générer une efficacité opérationnelle significative. Que vous gériez 10 ou 10 000 terminaux, la mise à jour programmatique de la description de l’appareil permet de maintenir la clarté et la cohérence.

Les utilisateurs de NinjaOne peuvent exploiter ce script dans le moteur de script de la plateforme, en injectant des variables de manière dynamique pour des mises à jour précises pendant les tâches de routine, l’onboarding ou la réponse aux incidents. C’est un exemple parfait de la combinaison de la puissance de PowerShell et de la flexibilité de NinjaOne pour optimiser la gestion des terminaux.

Next Steps

Building an efficient and effective IT team requires a centralized solution that acts as your core service delivery tool. NinjaOne enables IT teams to monitor, manage, secure, and support all their devices, wherever they are, without the need for complex on-premises infrastructure.

Learn more about NinjaOne Remote Script Deployment, check out a live tour, or start your free trial of the NinjaOne platform.

Catégories :

Vous pourriez aussi aimer