【问题标题】:Powershell script giving an error but runs in shellPowershell脚本给出错误但在shell中运行
【发布时间】:2015-03-29 06:25:43
【问题描述】:

我需要为特定经理和 2 级直接下属创建和更新分发列表。我承认我不是一个有创造力的人,所以我使用了 powershell 并以我能想到的最好方式做到了这一点。问题是这将被安排每几周运行一次以更新列表,因此它需要查看用户是否存在,如果不存在则添加他。在执行此操作的“If”语句中,我在运行脚本时遇到了错误,但是如果我将代码部分拉出并在 powershell 中手动运行它就可以工作。

我的执行政策设置为不受限制,所以我认为这不是问题所在。 我们正在运行 Powershell 2,不幸的是我无法更改它。

这是我的脚本和我得到的错误。我意识到两个字符串在代码的下部不匹配,即使它们都对不同的文件执行相同的操作。如果我在第一个错误中遇到错误,我应该能够在两者中放入相同的代码以使其正常工作。任何帮助将不胜感激。

    $Identity="User"
 $Listname="Global-Leader"

#     This Script will work from a specified Manager and get his direct reports down 2 Levels then #add them to a specified list. This Script works in the AD Module. 
# ====================
#|        My Company
#| SCRIPT NAME: Leader
#| VERSION: 1
#| VERSION DATE: 3/24/2015
#| AUTHOR: Powershell Rookie
#====================
#load ActiveDirectory module If not already loaded.
if (!(Get-Module -Name ActiveDirectory)) {import-module ActiveDirectory}


Get-AdUser $Identity -properties DirectReports | Select-Object -ExpandProperty DirectReports | Get-ADUser -Property * | Select SamAccountName, DisplayName, Office | Export-csv c:\work\leaders.csv

Import-Csv c:\work\Leaders.csv | ForEach-Object {Get-AdUser $_.SamAccountName -Property DirectReports | Select-Object -ExpandProperty DirectReports | Get-Aduser -Property * | Select SamAccountName, DisplayName, Office} | Export-csv c:\work\leaders1.csv

Import-csv C:\work\leaders.csv | Foreach-Object If (!(Get-ADUser $_.SamAccountName –properties MemberOf).MemberOf –like “$listname”) {Add-ADGroupMember $listname –member $_.samAccountName}

Import-csv C:\work\leaders1.csv | Foreach-Object If ((Get-ADUser $_.SamAccountName –properties MemberOf).MemberOf –like “$listname”) {Add-ADGroupMember $listname –member $_.samAccountName}

                if ((Get-ADUser $user -Properties MemberOf).memberOf -like "$listName") {
                               Write-Host -ForegroundColor Green "$user is already a member of $listName"
                              } else {
                               Write-Host -ForegroundColor Yellow "Adding $user to $listName"
                               Add-ADGroupMember $ListName -member $user
                                }

这是我不断收到的错误:

[PS] C:\work>.\leader.ps1
Unexpected token '{' in expression or statement.
At C:\work\leader.ps1:25 char:143
+ Import-csv C:\work\leaders.csv | Foreach-Object If (!(Get-ADUser $_.SamAccountName â?"properties MemberOf).MemberOf â?"like â?o$listnameâ
??) { <<<< Add-ADGroupMember $listname â?"member $_.samAccountName}
    + CategoryInfo          : ParserError: ({:String) [], ParseException
    + FullyQualifiedErrorId : UnexpectedToken

【问题讨论】:

  • 如果文件没有 BOM,PowerShell 似乎不会检测到 UTF-8,因此请将文件保存为带 BOM 的 UTF-8,或者消除非 ASCII 字符,例如:–“”。跨度>
  • 与代码问题无关,但如果您使用的是 Exchange,请考虑改为创建自定义动态通讯组。如果组设置正确,则无需一遍又一遍地重新运行脚本。
  • 这是文件的确切内容吗?因为第 25 行中没有 char 143 或 {。

标签: powershell powershell-2.0


【解决方案1】:

使用 -like 时的快速回答,您需要对您的标准不那么具体。

-like "*$Listname*"

Like 正在寻找要在项目开头的特定文本 搜索。如果该项目可以出现在 memberof 中的任何位置,那么您需要添加通配符或使用 -match 代替。 -match 暗示 * 在您的搜索项目周围。

由于该命令的大多数响应应以

开头

CN=

您的成员组不会是它发现的第一件事

希望有帮助

Difference between -like and -match

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2017-09-30
    • 2017-07-20
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多