PowerShell Write-EventLog CmdLet 手动工作,而不是在脚本中

PowerShell Write-EventLog CmdLet works manually, not in script

我正在编写一个 PowerShell 脚本来禁用和移动 AD 中的用户。这部分效果很好。但是我想在事件日志中记录每个事件。 cmdlet Write-EventLog 在手动输入时工作正常。

Write-EventLog –LogName ManageAD –Source “ManageUsers Script” –EntryType Information –EventID 1 –Message “This is a test message"

但是,当我将 cmdlet 添加到脚本时出错。

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

如有任何建议,我们将不胜感激。

想简单回答一下,您的代码中有智能引号。这些来自您最初复制该代码的地方或您的测试环境的产品。无论哪种方式,您都需要提防那些窃听者。

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

应该是。

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

我想从错误中指出,我还看到了其他工件...

â?"LogName ManageAD â?"

这让我想知道连字符是否像 em-dash 一样长(回到之前关于您的编辑器选择的问题!)。

请查看连字符和 2 个破折号 - - - 之间的细微差别。也有破折号反对基本的连字符。右边的是连字符。

代码可能在 ISE 内部运行,而您是 运行 常规控制台中的脚本?