Получение ошибки синтаксического анализа при попытке запустить сценарий PowerShell для Active Directory - PullRequest
1 голос
/ 17 июня 2020

Я пишу сценарий, который обновит атрибуты пользователя в Active Directory из файла CSV. Сейчас у меня только одна ошибка, и она связана с синтаксисом. Не уверен, какой синтаксис правильный; Я указал ошибку, которую получаю при запуске скрипта.

Вот сценарий для обновления пользователей AD из файла CSV.

#Updates AD user attributes from CSV file

$credential = Get-Credential

#Load data from file.csv
$ADUsers = Import-csv file_location

# Server
$server = "127.0.0.1"

# Count variable for number of users update
$count = 0

#Go through each row that has user data in the CSV we just imported 
foreach ($User in $ADUsers)
{
    # Read user data from each field in each row and assign to variables.

    $Username = $User.Username
    $Title = $User.Title
    $Office = $User.Office
    $Description = $User.Description


    #Check to see if the user already exists in AD. If they do, we update.
    if (Get-ADUser -Filter "SamAccountName -eq $Username" -Server $server -Credential $credential)
    {

         #Set User attributes
         Set-ADUser -Title $Title -WhatIf `
            -Office $Office -WhatIf `
            -Description $Description -WhatIf

         # Print that the user was updated 
         Write-Host $Username "- User attributes have been updated." -ForegroundColor Yellow

         # Update Count
         $count += 1    
     }


}

# Print the number of updated users
Write-Host $count "Users have been updated" -ForegroundColor Green

Вот ошибка, которую я получаю при запуске сценария

Get-ADUser : Error parsing query: 'SamAccountName -eq ADUSER' Error Message: 'syntax error' at position: '20'.
At file_location from CSV.ps1:35 char:6
+     if (Get-ADUser -Filter "SamAccountName -eq $Username" -Server $se ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Get-ADUser], ADFilterParsingException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Microsoft.ActiveDirectory.Management.Commands.GetADUse 
   r

0 Users have been updated

1 Ответ

2 голосов
/ 17 июня 2020

Чисто ошибка, вероятно, вызвана расширением строки, заключив в одинарные кавычки $UserName, например:

Get-ADUser -Filter "SamAccountName -eq '$Username'" # and the rest of the parameters...

Однако я должен указать, что вам обычно не нужен параметр фильтра с samAccountName. JUst сделайте что-нибудь вроде:

Get-ADUser $UserName # and the rest of the parameters...

Также -Whatif указано несколько раз в команде Set-ADUser. Это вызовет проблемы после того, как вы решите текущую проблему.

Вам следует избегать всех этих обратных тиков. Вместо этого используйте разбрызгивание. Вот пример непроверенного сплаттинга:

# Updates AD user attributes from CSV file

$credential = Get-Credential

# Load data from file.csv
$ADUsers = Import-csv file_location


# Count variable for number of users update
$count = 0

# Go through each row that has user data in the CSV we just imported 
ForEach($User in $ADUsers)
{
    # Ppopulate hash table for Get-ADUser splatting:
    $GetParams =
    @{
        Identity     = $User.Username
        Server       = '127.0.0.1'
        Credential   = $Credential
    }

    # Initialize hash table for Set-ADUser splatting:
    $SetParams =
    @{
        Server       = '127.0.0.1'
        Identity     = $User.Username
        Title        = $User.Title
        Office       = $User.Office
        Description = $User.Description
        Credential   = $Credential
    }

    # Check to see if the user already exists in AD. If they do, we update.
    if ( Get-ADUser @GetParams)
    {
         # Set User attributes
         Set-ADUser @SetParams -WhatIf

         # Print that the user was updated 
         Write-Host -ForegroundColor Yellow "$User - User attributes have been updated." 

         # Update Count
         $count += 1    
     }
}

# Print the number of updated users
Write-Host $count "Users have been updated" -ForegroundColor Green

Обратите внимание, что это не обязательно то, как я бы sh завершил код. Есть так много способов делать что-то, и многое зависит от личных предпочтений et c ... В этом случае я ограничиваю модификации вашего исходного примера, чтобы продемонстрировать только определенные моменты, такие как сплаттинг. Когда, где и почему реализовать, зависит от вас.

Другой вопрос, о котором вы, возможно, захотите подумать, - насколько надежным вам нужен этот или любой другой сценарий. Вам нужна обработка ошибок? Вы хотите сообщить, когда пользователь в файле CSV не найден в AD (что само по себе будет отображать ошибку)? Вам нужен файл журнала? Это разовое усилие или что-то, что будет длиться годами? c ...

В любом случае, я надеюсь, что дополнительный пример будет вам полезен. Дай мне знать, как дела. Рада работать с вами и дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...