2016-08-16 3 views
-1

"찾을 수 없음"을 나타내는 AD 사용자 ID의 txt 파일을 가져 와서 찾을 수있는 파일에 대해 DisplayName 속성을 제공하고 결과를 파일로 내 보냅니다. 그게 가능하니?PowerShell AD 사용자

나는 이것을 시도했지만 알려진 유효한 사용자 ID를 반환하지 않았습니다.

$ user = Get-Content "c : \ users \ oh75256 \ desktop \ powershell learning \ userids.txt" $ user | foreach는 { $ 이름 = "$ _" $ 검색 자 = [ADSISearcher] "(표시 이름 = $ 이름)" $ 결과 = $ Searcher.FindOne() 경우 ($ 결과 -eq $ 널 (null)) { "$ 이름 ($ status -eq "True") { "$ Name is ($ status -eq"True ") $ 상태 = (Get-ADUser $ Name) .Enabled 유효 "C >> : \ 사용자 \ oh75256 \ userstatus.csv } 다른 { 은"$ 이름은 C >> "유효하지 않습니다 : \ 사용자 \는 oh75256 \ userstatus.csv 은} } }

작동 그 ! 이제 2 개의 PowerShell 스크립트가 생겼으므로이 스크립트를 하나로 결합하고 싶습니다. hostname, lastuser, status, AD라는 4 개의 열이있는 하나의 txt 파일이 있습니다. 호스트 이름을 핑 (ping)하고 핑 (ping)하면 로그온 한 사용자 이름을 반환하는 내 핑 스크립트로 시작하고 싶습니다. ping을하지 않으면 "offline"을 반환합니다. 그런 다음 오프라인 호스트 이름에 대한 lastuser 열을 가져 와서 AD와 비교하여 사용자의 이름을 반환하거나 "AD에서 찾을 수 없습니다". pingnames.txt

호스트 이름 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 

에 사용자 ID를 확인하기 위해 내 스크립트는 그들을 결합 할 수있다? - 고마워요, 카렌

+0

을 "하지만 알려진 유효한 사용자를 반환하지 않았습니다 ID "- 그러면 * 반환 했습니까? –

답변

0

당신은 사용자 ID를 찾고 있지만 코드는 표시 이름을 찾고 있다고 명시했습니다.

난 당신이 라인을 변경하려는 생각 : 당신이 열이 추가 정보를 원하는 경우

$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

그게 효과가! 정말 고맙습니다. 계정이 유효 할 때 다른 열에 이름과 samaccountname을 어떻게 표시 할 수 있는지 조언 해 주실 수 있습니까? – klhunter

+0

PSObject 및 Export-CSV를 사용하여 내 대답을 업데이트했습니다. –