2015-10-07 1 views
0

J'écris un script PowerShell pour désactiver et déplacer les utilisateurs avec AD. cette partie fonctionne très bien. Cependant, je voudrais enregistrer chaque événement dans le journal des événements. La cmdlet Write-EventLog fonctionne correctement lorsqu'elle est tapée manuellement. Cependant, lorsque j'ajoute l'applet de commande au script, il y a des erreurs.PowerShell Write-EventLog CmdLet fonctionne manuellement, pas dans le script

Write-EventLog –LogName ManageAD –Source “ManageUsers Script” –EntryType Information –EventID 1 –Message “User ” + $SAM + " has been disabled" 

Write-EventLog : A positional parameter cannot be found that accepts argument 'Scriptâ??'. 
At C:\test\ManageUsers.ps1:12 char:16 
+  Write-EventLog <<<< â?"LogName ManageAD â?"Source â?oManageUsers Scriptâ?? â?"EntryType Information â?"EventID 
â?"Message â?oUser â?? + $SAM + " has been disabled" 
    + CategoryInfo   : InvalidArgument: (:) [Write-EventLog], ParameterBindingException 
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.WriteEventLogCommand 

Toutes les suggestions sont appréciées.

+0

Si vous enregistrez des scripts au format UTF8, utilisez BOM. PowerShell ne détecte pas UTF8, si le fichier n'a pas de nomenclature. – PetSerAl

+0

@PetSerAl Donc, si le fichier était codé avec UTF8 et que la nomenclature était présente, cela serait correct? Est-ce vrai pour d'autres encodages ou juste UTF8? – Matt

+0

@Matt Pour moi PowerShell gérer correctement les guillemets spéciaux en tirets, tant qu'il peut les lire correctement à partir du fichier. Je ne teste que UTF8 et UTF16, tous deux correctement détectés à partir de BOM. – PetSerAl

Répondre

2

Vous voulez dire la réponse simple est que vous avez des citations intelligentes dans votre code. Ceux-ci proviennent d'où vous avez initialement copié ce code ou un produit de votre environnement de test. De toute façon, vous devez faire attention à ces bêtises.

Write-EventLog –LogName ManageAD –Source “ManageUsers Script” –EntryType Information –EventID 1 –Message “User ” + $SAM + " has been disabled" 

Devrait être à la place.

Write-EventLog –LogName ManageAD –Source "ManageUsers Script" –EntryType Information –EventID 1 –Message "User " + $SAM + " has been disabled" 

Je voudrais signaler de l'erreur que je vois d'autres artefacts ainsi ...

â? " LogName ManageAD â?"

Je me demande si les traits d'union sont les longs comme ceux d'un em tableau de bord (Revient à une autre question au sujet de votre choix de l'éditeur!).

Voir la différence subtile ici entre le tiret et 2 tirets - - -. Avoir aussi votre tiret contre le trait d'union de base. Celui sur la droite est le trait d'union.

enter image description here

était le code de travail à l'intérieur de l'ISE peut-être et vous exécutiez le script dans la console régulière?