Question Fractionnement chaine caractère

Plus d'informations
il y a 2 ans 9 mois #30941 par ericlm128
Réponse de ericlm128 sur le sujet Fractionnement chaine caractère
Je suis assez surpris de ce que tu dit.
Un script Powershell est un fichier texte qui ne contient pas de méta-données. Tu peux avoir un problème d'encodage, il doit être en ANSI (Windows-1252).

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #30942 par witness
Réponse de witness sur le sujet Fractionnement chaine caractère
ericlm128,

Je dis méta-données ce n'est peut-être pas le bon mot mais c'est sur un forum que j'ai trouvé cette solution et l'hypothèse c'est que par le clic droit de la souris, il y a un ajout de quelque chose et du coup ça produit l'erreur.
Depuis que je copie mon script depuis viual studio code vers la console powershell en utilisant ctrl+v je n'ai plus cette erreur.
Je viens de retester avec le clic droit de la souris et j'ai de nouveau l'erreur.
Après je ne suis pas expert donc je ne sais pas vraiment.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #30943 par Arnaud Petitjean
Je pense que c'est à cause du positionnement de tes accolades. Il vaut mieux les mettre après le mot clé sur la même ligne que sur la ligne du dessous. Du moins c'est, par expérience, ce que je recommande.

Exemple : 

# Initialisation de $printers à Null car si on réexécute une seconde fois le script alors $printers contiendra une valeur et notre test échouera
$printers = $null

# Récupération du nom de l'ordinateur
$computername = $env:computername

# Chargement du fichier contenant les imprimantes
$Printerslist = Get-Content -path C:\temp\imprimantes.txt

# On recherche une ligne de texte qui contient le nom de l'ordinateur
$printers = $Printerslist | Where-Object { $_ -like "*$computername*"}

If ($printers) {
   Foreach ($printer in $printers) {
      # Récupération du nom de l'imprimante
      $printerpath = ($printer -split ':')[-1]
 
     (New-Object -ComObject WScript.Network).AddWindowsPrinterConnection($printerpath)
     (New-Object -ComObject WScript.Network).SetDefaultPrinter($printerpath)
  }
}
Else {
    Write-Output "Il n'y a pas d'imprimante à connecter pour cet ordinateur"
}

Voilà j'en ai profité au passage pour modifier ton script et placer le foreach au bon endroit. En effet, il faut prévoir le cas où il y ait plusieurs imprimantes à connecter.

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Dernière édition: il y a 2 ans 9 mois par Arnaud Petitjean. Raison: Remise en forme du code

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #30946 par witness
Réponse de witness sur le sujet Fractionnement chaine caractère
Merci Arnaud pour la correction du script.

J'ai donc créé une GPO ordinateur pour script démarrage de session powershell mais ça ne fonctionne pas.
L'imprimante ne charge pas et si je lance powershell et que je lance le script manuellement directement dans la console, j'obtiens ce message d'erreur:

PS C:\Windows\system32> \\server\NETLOGON\Mappage_imp.ps1
La valeur n'est pas comprise dans la plage attendue.
Au caractère \\server\NETLOGON\Mappage_imp.ps1:18 : 6
+      (New-Object -ComObject WScript.Network).AddWindowsPrinterConnect ...
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) , ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException

Il n'y a pas d'imprimante appelée "\\server\HP202".
Au caractère \\server\NETLOGON\Mappage_imp.ps1:19 : 6
+      (New-Object -ComObject WScript.Network).SetDefaultPrinter($print ...
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) , COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

Par contre, si je relance le script de la même manière juste en dessous, ça fonctionne, l'imprimante charge.
Si vous avez une idée ?

Concernant les autorisations:

PS C:\Windows\system32> Get-ExecutionPolicy
Unrestricted

Merci encore.
Dernière édition: il y a 2 ans 9 mois par witness.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #30947 par Arnaud Petitjean
Est-ce que ton script fonctionne lorsque tu le lances normalement ?

Si c'est bien le cas, ça doit être probablement car il est fait pour s'exécuter dans la session de l'utilisateur. Donc choisit plutôt une GPO utilisateur qu'une GPO ordinateur qui elle s'exécute avec le compte System.

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #30949 par witness
Réponse de witness sur le sujet Fractionnement chaine caractère
Quand je suis sur une session utilisateur et que je lance le script par un clic droit "executer avec powershell" à partir du partage netlogon, j'obtiens ce message:

Set-ExecutionPolicy : Windows PowerShell a correctement mis à jour votre
stratégie d’exécution, mais ce paramétrage est remplacé par une stratégie
définie dans un contexte plus spécifique. Votre environnement va donc conserver sa stratégie d’exécution actuelle, Unrestricted. Tapez « Get-ExecutionPolicy -List» pour afficher les paramètres de stratégie d’exécution. Pour plus d’informations, voir «Get-Help Set-ExecutionPolicy».     Au caractère Ligne:1 : 46 + ...  -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '\ ...
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], Sec
   urityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Com
   mands.SetExecutionPolicyCommand

Ce qui est étonnant c'est que lorsque je relance le chemin du script un deuxième fois, il fonctionne.
C'est comme si il y avait un blocage lors de la première exécution et que ça active quelque chose qui permet l'exécution lors du deuxième lancement.

Je teste en gpo users

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.759 secondes
Propulsé par Kunena