Meilleur auteur de réponses
Récupérer des imprimantes partagées sur un ordinateur distant

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 svpMon powershell :
https://ibb.co/M9LCbdf
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
-
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
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
-
-
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