2016-08-16 10 views
-1

Я хотел бы иметь сценарий, который принимает txt-файл идентификаторов пользователей AD, указывает, какие «не найдены», предоставляет свойство DisplayName для найденных и экспортирует результаты в файл. Это возможно?Пользователи PowerShell AD

Я пробовал это, но он не возвращал известных действительных идентификаторов пользователей.

$ user = Get-Content "c: \ users \ oh75256 \ desktop \ powershell learning \ userids.txt" $ user | Еогеасп { $ Name = "$ _" $ Searcher = [ADSISearcher] "(DisplayName = $ Name)" $ Результаты = $ Searcher.FindOne() если ($ Результаты -eq $ NULL) { «$ Имя не в AD ">> C: \ users \ oh75256 \ userstatus.csv } else { $ status = (Get-ADUser $ Name) .Enabled if ($ status -eq" True ") { " $ Name is действительный»>> C: \ пользователи \ oh75256 \ userstatus.csv } еще { "$ Name не является действительным" >> C: \ пользователи \ oh75256 \ userstatus.csv }} }

это работает ! Теперь, когда у меня есть 2 рабочих сценария powershell, я хотел бы объединить их в один. У меня есть один txt-файл с 4 столбцами: hostname, lastuser, status, AD. Я хотел бы начать с моего скрипта ping, который пингует имя хоста, и если он пингует, он возвращает имя пользователя loggedon. если он не выполняет ping, он возвращает «offline». Затем я хотел бы взять столбец lastuser для автономного имени хоста и проверить его против AD, чтобы вернуть имя пользователя или «не найденное в AD». Вот пример текстового файла: pingnames.txt

HostName LastUser Статус (в автономном режиме или SamAccountName) AD (Имя или не найден)

NAHNT-1234567 bruteaa
NAHNT-2345678 OH75256
NAHNT-3456789 YD13099
NAHNT-4567891 rh16633
NAHNT-5678912 Администратор
NAHNT-6789123 xt07718
NAHNT-8912345 AA00718
NAHNT-9123456 LR17114

Это мой сценарий для ping и получения текущего входа в систему.

function get-avail { 
param ($computername) 
$availCheck = New-Object psobject -property @{ 
ComputerName = $computername 
Status = 'Offline' 
LogonUser = 'None' 
} 
$test = Test-Connection -ComputerName $computername -Count 1 
-errorAction:SilentlyContinue 
if ($test) { 
$availCheck.Status = 'Online' 
$wmics = Get-WmiObject Win32_ComputerSystem -ComputerName $computername 
} 
if ($wmics.UserName) { 
$availCheck.LogonUser = $wmics.UserName 
} 
$availCheck | select ComputerName,Status,LogonUser 
} 
cat "c:\myfiles\pingnames.txt" | %{ get-avail $_ } | export-csv c:\myfiles\results.csv 

Это мой скрипт для проверки идентификатор_пользователя в AD

$userProfile = Get-Content "c:\myfiles\userids.txt" | 
Select @{Expression={$_};Label="SamAccountName"}, 
@{Expression={" "};Label="First Name"}, 
@{Expression={" "};Label="Last Name"}, 
@{Expression={$False};Label="ExistInAD"} 

foreach($user in $userProfile) 
{ 
$Account = Get-ADUser $user.SamAccountName 
-erroraction silentlycontinue 
If($?) 
{ 
    $user.SamAccountName 
    $user.ExistInAD = $True 
    $user.'First Name' = $Account.GivenName 
    $user.'Last Name' = $Account.Surname 
} 
Else 
{ 

    "------------------------ $($user.SamAccountName)" 
} 
} 

$userProfile | export-csv "c:\myfiles\mycsv.csv" -NoTypeInformation 

Можно ли объединить их? -Thanks, Karen

+0

«, но он не вернулся известный действительный пользователь ID "- то, что * он сделал? –

ответ

0

Вы заявляете, что ищете ИД пользователя, но ваш код выполняет поиск отображаемых имен.

Я думаю, что вы хотите, эта линия изменилась:

$Searcher = [ADSISearcher]"(SamAccountName=$Name)" 

Если вы хотите получить дополнительную информацию с колонками вам нужно создать PSObject:

$User = Get-Content "c:\users\oh75256\desktop\powershell learning\userids.txt" 
$User | foreach { 
    $Name = "$_" 
    $Searcher = [ADSISearcher]"(SamAccountName=$Name)" 
    $Results = $Searcher.FindOne() 
    $Object = New-Object -TypeName PSObject 
    $Object | Add-Member -Name "SamAccountName" -MemberType NoteProperty -Value $_ 
    if ($Results -eq $null) 
    { 
     $Object | Add-Member -Name "Status" -MemberType NoteProperty -Value "Not in AD" 
     $Object | Export-Csv C:\users\oh75256\userstatus.csv -NoTypeInformation -Append 
    } 
    else 
    { 
     [string]$DisplayName = $Results.Properties.name 
     $Object | Add-Member -Name "Name" -MemberType NoteProperty -Value $DisplayName 

     $status = (Get-ADUser $Name).Enabled 
     if ($status -eq "True") 
     { 
      $Object | Add-Member -Name "Status" -MemberType NoteProperty -Value "Enabled" 
      $Object | Export-Csv C:\users\oh75256\userstatus.csv -NoTypeInformation -Append 
     } 
     else 
     { 
      $Object | Add-Member -Name "Status" -MemberType NoteProperty -Value "Disabled" 
      $Object | Export-Csv C:\users\oh75256\userstatus.csv -NoTypeInformation -Append 
     } 
    } 
} 
+0

Это сработало! Огромное спасибо. не могли бы вы сообщить, как я могу показать имя и имя samaccount в разных столбцах, когда учетная запись действительна? – klhunter

+0

Я обновил свой ответ с помощью PSObject и Export-Csv. –