2017-02-17 28 views
0
  • История: Я создаю сценарий Powershell, чтобы создать пользователя из определенной таблицы, содержащей список пользователей, и поместить их в определенный OrganizationalUnit.Как извлечь содержимое поля в powershell

  • Проблемы: В конце сценария, я хотел бы иметь отчет для того, чтобы перечислить ли или нет один или несколько учетной записи пользователя отключена amoung вновь созданной учетной записи

В моем сценарий, я должен вводить пароль для каждого пользователя, но я могу ввести пароль, который не будет соответствовать политике паролей, определенной в Active Directory; в этом случае учетная запись будет создана, но отключена.

Чтобы продолжить, я попробовал:

dsquery user "ou=sp,dc=mydomain,dc=local" -disabled 

и распечатать мне это:

 
"CN=user1,OU=SP,DC=mydomain,DC=local" 
"CN=user2,OU=SP,DC=mydomain,DC=local" 
"CN=user3,OU=SP,DC=mydomain,DC=local" 
  • Моя цель: Я хотел бы, чтобы извлечь в переменной значения в «CN ", чтобы сравнить их с исходной таблицей пользователя в моем скрипте.

    dsquery user "dc=mydomain,dc=local" -disabled | where-object {$_.CN -ne $null} 
    

или

dsquery user "dc=mydomain,dc=local" -disabled | where-object {$_.Common-Name -ne $null} 

Но это не помогло (не работает). Как я могу продолжить?

+0

У вас нет доступа к AD-командлетам для этой вещи? Если вы не просмотрели разбор знаковых имен? dsquery не возвращает PSObjects, чтобы вы не могли рассматривать их как таковые. – Matt

ответ

0

Это не тестировалось - просто "из головы"

$csvData = Import-Csv 'UserList.csv' -Delimiter ';' -Encoding UTF8 
$userList = dsquery user "ou=sp,dc=mydomain,dc=local" -disabled 
$listOfDisabledAccounts = @() 
foreach ($user in $userList) 
{ 
    if ($csvData.Name -contains (($user -split ',')[0] -replace 'CN=','')) 
    { 
     $listOfDisabledAccounts += $csvData.Name 
    } 
} 

$listOfDisabledAccounts 
0

dsquery не является PowerShell командлет, но исполняемый файл. Это означает, что он не собирается возвращать объекты PowerShell в конвейер. Метод Kongstead не работает, зная, что он возвращает строковый вывод. Управляя строкой, используя split и replace, вы можете получить вывод в нечто пригодное для ваших целей. Другими двумя способами получения этой информации будет использование модуля AD (от RSAT на настольных ОС) и методов ADSI от .Net. Оба из них возвратят данные, которые будут непосредственно использоваться.

Командлеты AD были бы самыми легкими. Чтобы получить все отключенные учетные записи, будет выглядеть примерно так:

Search-ADAccount -AccountDisabled -SearchBase "dc=mydomain,dc=local"