【发布时间】: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 或 {。