2013-10-02 4 views
1

Я новичок в powershell и нуждаюсь в помощи с некоторыми ошибками в моем скрипте. Я в основном пытаюсь импортировать всех пользователей из Active Directory и мой сценарий ниже:Импорт пользователей из AD с использованием PowerShell

#Location the CSV file is being saved. 
$csvFileLocation = "C:\ADImport\ADImport.csv" 

#Verifies that the AD Module is loaded. If it is not, checks if it is available, if it is, loads it. 

Function Get-ADModule { 
    if(-not(Get-Module -Name ActiveDirectory)) { 
     if(Get-Module -ListAvailable | Where-Object {$_.Name -eq "ActiveDirectory" }) { 
      Import-Module -Name ActiveDirectory 
      $true 
     } else { 
      $false 
     } 
    } else { 
     $true 
    } 
} 

if (Get-ADModule) { 
    #Creates the CSV Table Format, change the AD DS TableNames to the CoarseMail TableNames 
    $tableFormat = @{ Expression = { $_.GivenName -replace ","," " };Label = "FirstName" }, 
        @{ Expression = { $_.SurName -replace ","," " };Label = "LastName" }, 
        @{ Expression = { $_.SAMAccountName -replace ","," " };Label = "ID" } 
    #Gets AD User Objects that are enabled, and only specified properties for perfomance, filters out specified OU's, filters out objects with no first or last name or EmployeeID. 
    Get-ADUser -SearchBase "DC=mydomain,DC=com" -Properties SAMAccountName, GivenName, Surname ` 
    | Where-Object { 
     ($_.GivenName -ne $null) -and 
     (($_.GivenName.Length -ne 0) -and ($_.SurName.Length -ne 0)) 
     } ` 
    | Select-Object $tableFormat | Export-Csv 
    $csvFileLocation -NoType 
} else { 
    Add-Content ($csvFileLocation + ".txt") "The ActiveDirecotry Powershell Module does not 
    exist on this machine." 
} 

Ошибка я получаю ниже:

PS C:\Users\benc> C:\Users\benc\Desktop\ADImportTest.ps1 
Get-ADUser : Cannot validate argument on parameter 'Filter'. The argument is null or empty. 
Supply an argument that is not null or empty and then try the command again. 
At C:\Users\benc\Desktop\ADImportTest.ps1:27 char:15 
+  Get-ADUser <<<< -SearchBase "DC=mydomain,DC=com" ` 
    + CategoryInfo   : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException 
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser 

Я не уверен, где я неправильно в скрипт, но любая помощь будет оценена.

+0

Get-ADUser требует параметр фильтра, который вы не поставляете. Попробуйте добавить «-Filter *» к вашему вызову Get-ADUser и посмотреть, что вам нужно. Имейте в виду, что это не очень эффективно, поскольку вы получаете ВСЕ ОБЪЕКТЫ пользователя AD, а затем фильтруете их с помощью Where-Object. Прочтите подробную помощь по Get-ADUser для способов преобразования ваших фильтров Where-Object в формат, который нужен Get-ADUser; то вы будете фильтровать по мере запроса AD, что намного лучше. – jbsmith

+0

Также сообщения об ошибках PowerShell, как правило, очень полезны при определении именно того, что является проблемой. В сообщении об ошибке ваша проблема была буквально правильной. 'Невозможно проверить аргумент в параметре 'Фильтр'. Аргумент пустой или пустой. Поставьте аргумент, который не является нулевым или пустым, а затем повторите попытку. ' – EdgeVB

ответ

0

Проверьте синтаксис Get-ADUser. -Фильтр является обязательным параметром. Добавьте -Filter {objectClass -eq 'user'}, и ошибка исчезнет.

+0

Работал как шарм, спасибо большое. – BenCee

Смежные вопросы