none
Récupérer des imprimantes partagées sur un ordinateur distant RRS feed

  • Question

  • Bonjour;

    Je travaille sur un projet et dans ce projet j'aimerais récupérer la liste des imprimantes partagées sur un poste distant mais avec mon code actuel cela ne récupère que les imprimantes installées. Pouvez-vous m'aider à trouver une solution pour avoir cette liste svp 

    Mon powershell : 

    https://ibb.co/M9LCbdf

    lundi 7 juin 2021 15:28

Réponses

  • bonsoir NeOsiQL

    Comme toujours en Powershell, il n'y a pas qu'un seul moyen d'arriver à l'objectif. Je vais en  llster 3 avec avantages/inconvénients.

    • Méthode Legacy : WMI-Object

    Sur le principe ce que tu fais est un bon début, mais effectivement tu ne filtres pas sur une propriété essentielle "Shared".

    Get-WmiObject -Class win32_printer | Where-Object -Property shared -EQ $true

    Ca le fera mieux :-)

    Ne me crois pas, fais un

    Get-WmiObject -Class win32_printer | Select-Object -Property *

    Inconvénient : les requêtes WMI sont à replacer par les requêtes plus "standard" CIM.

    + dans ce que tu fais : lenteur du New-PSSession et du Invoke-Command.

    un :

    Get-WmiObject -Class win32_printer -ComputerName  remotecomputer -Credential $Cred | Where-Object -Property shared -EQ $true

    serait bien plus effacace.

    • Méthode CIM :

    Même principe de fonctionnement que WMI.

    Get-CimInstance -ClassName win32_printer -ComputerName remotecomputer  | Where-Object -Property Shared -EQ $true

    Inconvénient : pas de paramètre -ComputerName et -Credentials, obligé de passer par un invoke-command ou un Enter-PSSession, d'ou quelque lenteurs :-(

    • Methode cmdlet native Get-printer
    Get-Printer -ComputerName remotecompmuter | Where-Object -Property Shared -EQ $true

    C'est rapide, tant qu'on a pas à passer de credentials différents de ceux de l'utilisateur courant, sinon on est bon pour Invoke-command ou Enter-PSSession.Mais si tu as un compte de domaine qui dispose de privilèges sur l'ensemble des machines, pas de pb, c'est de loin la voie la plus rapide (localement 11-12 ms contre 160-220 pour WMI et CIM, CIM + rapide que WMI.)

    cordialement

    Olivier

    • Marqué comme réponse NeOsiQL mercredi 9 juin 2021 08:18
    mardi 8 juin 2021 16:50
  • Bonjour , 

    Merci de votre réponse malheureusement les commandes ne fonctionne pas sur les ordinateurs distants car les commande ne me ramène rien 

    ma solution est que je passe par une clé de registre pour avoir la liste des imprimantes partagées :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\S-1-5-21-1659004503-1682526488-725345543-33540\Printers\Connections\

    ensuite je fais un trie et une sélection pour avoir en sortie ma liste d'imprimantes partagées sur l'ordinateur distant

    https://ibb.co/ww1zK16

    • Marqué comme réponse NeOsiQL mercredi 9 juin 2021 08:42
    mercredi 9 juin 2021 08:41

Toutes les réponses

  • bonsoir NeOsiQL

    Comme toujours en Powershell, il n'y a pas qu'un seul moyen d'arriver à l'objectif. Je vais en  llster 3 avec avantages/inconvénients.

    • Méthode Legacy : WMI-Object

    Sur le principe ce que tu fais est un bon début, mais effectivement tu ne filtres pas sur une propriété essentielle "Shared".

    Get-WmiObject -Class win32_printer | Where-Object -Property shared -EQ $true

    Ca le fera mieux :-)

    Ne me crois pas, fais un

    Get-WmiObject -Class win32_printer | Select-Object -Property *

    Inconvénient : les requêtes WMI sont à replacer par les requêtes plus "standard" CIM.

    + dans ce que tu fais : lenteur du New-PSSession et du Invoke-Command.

    un :

    Get-WmiObject -Class win32_printer -ComputerName  remotecomputer -Credential $Cred | Where-Object -Property shared -EQ $true

    serait bien plus effacace.

    • Méthode CIM :

    Même principe de fonctionnement que WMI.

    Get-CimInstance -ClassName win32_printer -ComputerName remotecomputer  | Where-Object -Property Shared -EQ $true

    Inconvénient : pas de paramètre -ComputerName et -Credentials, obligé de passer par un invoke-command ou un Enter-PSSession, d'ou quelque lenteurs :-(

    • Methode cmdlet native Get-printer
    Get-Printer -ComputerName remotecompmuter | Where-Object -Property Shared -EQ $true

    C'est rapide, tant qu'on a pas à passer de credentials différents de ceux de l'utilisateur courant, sinon on est bon pour Invoke-command ou Enter-PSSession.Mais si tu as un compte de domaine qui dispose de privilèges sur l'ensemble des machines, pas de pb, c'est de loin la voie la plus rapide (localement 11-12 ms contre 160-220 pour WMI et CIM, CIM + rapide que WMI.)

    cordialement

    Olivier

    • Marqué comme réponse NeOsiQL mercredi 9 juin 2021 08:18
    mardi 8 juin 2021 16:50
  • Veuillez marquer la réponse utile comme réponse, ce qui serait beaucoup plus efficace pour les autres membres de la communauté de trouver des informations utiles.

    Faites-nous savoir si une aide supplémentaire est nécessaire.
    mercredi 9 juin 2021 05:38
  • Bonjour , 

    Merci de votre réponse malheureusement les commandes ne fonctionne pas sur les ordinateurs distants car les commande ne me ramène rien 

    ma solution est que je passe par une clé de registre pour avoir la liste des imprimantes partagées :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\S-1-5-21-1659004503-1682526488-725345543-33540\Printers\Connections\

    ensuite je fais un trie et une sélection pour avoir en sortie ma liste d'imprimantes partagées sur l'ordinateur distant

    https://ibb.co/ww1zK16

    • Marqué comme réponse NeOsiQL mercredi 9 juin 2021 08:42
    mercredi 9 juin 2021 08:41