IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Paramètre "composé" d'un cmdlet [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut Paramètre "composé" d'un cmdlet
    Bonjour,
    Question d'un gros nul en PS.
    Est-il réellement impossible de "composer" le paramètre d'un cmdlet ?

    Ceci fonctionne comme attendu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $PrinterS = @( ("1", "Drivers1"), 
    	("2", "Drivers2") ) 
    foreach ( $printer in $PrinterS)
    	{write-host "Printer"$Printer[0]" : Divers "$Printer[1]
    	$printername="Printer  + $Printer[0]
    	Add-Printer -Name $printername -DriverName $Printer[1] -PortName "LPT1:" -Shared -ShareName $printername  –Published}
    Alors que ceci génère une erreur au niveau du paramètre -Name et -Sharename de Add-Printer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $PrinterS = @( ("1", "Drivers1"), 
    	("2", "Drivers2") ) 
    foreach ( $printer in $PrinterS)
    	{write-host "Printer"$Printer[0]" : Divers "$Printer[1]
    	Add-Printer -Name "Printer"$Printer[0] -DriverName $Printer[1] -PortName "LPT1:" -Shared -ShareName "Printer"$Printer[0] –Published}
    "Printer"$Printer[0] est interprété bizarrement. A priori "Printer 1 Drivers1[0]" pour la première occurrence, ce qui fait que "1 Drivers1[0]" sont des paramètres inconnus.
    "Printer$Printer[0]" ne marche pas mieux : interprété litéralement comme Printer$Printer[0]"

    Merci

    EDIT
    Je donne les deux solutions proposées par @ericlm128 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Add-Printer -Name ("Printer"+ $Printer[0]) -DriverName $Printer[1] -PortName "LPT1:" -Shared -ShareName ("Printer"+ $Printer[0]) –Published}
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Add-Printer -Name "Printer$($Printer[0])" -DriverName $Printer[1] -PortName "LPT1:" -Shared -ShareName "Printer$($Printer[0])" –Published}
    l'utilisation de $() permettant l'exécution de commande à l'intérieur d'une chaîne avec double cote ".

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je pense que tu as des problèmes de syntaxes.

    Et comme ceci ?
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $printers = @(("1", "Drivers1"), ("2", "Drivers2"))
     
    foreach($printer in $printers)
    {
        $printerName = "Printer $($Printer[0])"
        $driverName = $Printer[1]
        Write-Host "Printer : $printerName, Driver : $driverName"
     
        Add-Printer -Name $printerName -DriverName $driverName -PortName "LPT1:" -Shared -ShareName $printerName  –Published
    }

  3. #3
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Bonjour et merci pour ta réponse.
    Ta proposition est équivalente à ma première solution (j'avais précisé qu'elle fonctionnait).

    Ce que je voulais savoir, c'est pourquoi dans Add-Printer -Name "Printer"$Printer[0], ce paramètre est mal interprété, alors qu'il n'y a pas de souci avec Add-Printer -Name $printerName (où $printerName ="Printer"$Printer[0]) ???

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Comme déjà dit, tu as un problème de syntaxe ici "Printer"$Printer[0]

    Voici quelques syntaxes correctes :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Printer$($Printer[0])"
    "Printer" + $Printer[0]

    Voir : https://www.delftstack.com/fr/howto/...ng-powershell/

  5. #5
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Je ne connaissais pas l'exécution de commande à l'intérieur d'une chaîne. Donc effectivement "Printer$($Printer[0])" fonctionne correctement.


    Par contre je dois faire quelque chose de travers car dans mon cas, ta seconde proposition entraîne une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Add-Printer -Name "Printer" + $Printer[0] -DriverName $Printer[1] -PortName "LPT1:" -Shared -ShareName "Printer" + $Printer[0]  -Published
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Add-Printer : Impossible de trouver un paramètre positionnel acceptant l'argument «*+*».
    Au caractère Ligne:1 : 1
    + Add-Printer -Name "Printer" + $Printer[0] -DriverName $Printer[1] -Po ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument : (:) [Add-Printer], ParameterBindingException
        + FullyQualifiedErrorId : PositionalParameterNotFound,Add-Printer

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    essaie comme ceci afin de bien délimiter les paramètres composés
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Add-Printer -Name ("Printer" + $Printer[0]) -DriverName $Printer[1] -PortName "LPT1:" -Shared -ShareName ("Printer" + $Printer[0]) -Published

  7. #7
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Oui exact. Ce coup-ci, ça passe parfaitement.
    Merci beaucoup pour ton éclairage précieux. J'avais cherché avant de poser la question mais ce n'est pas quelque chose d'évident à trouver dans la littérature.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pack de paramètres template composé
    Par Teaniel dans le forum Langage
    Réponses: 4
    Dernier message: 15/07/2019, 21h05
  2. Quote et double quote dans les requêtes paramétrées
    Par michel.souris dans le forum WinDev
    Réponses: 5
    Dernier message: 07/06/2013, 10h27
  3. Requete paramétrée avec des singles quotes ?
    Par Mirmillon dans le forum Bases de données
    Réponses: 5
    Dernier message: 03/12/2010, 11h34
  4. Passage d'un paramètre avec quote pour une procédure dynamique
    Par dcarroz dans le forum Développement
    Réponses: 7
    Dernier message: 26/01/2010, 11h06
  5. Réponses: 3
    Dernier message: 08/06/2007, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo