2017-02-17 1 views
0
  • 기록 : 사용자 목록이 들어있는 정의 된 테이블에서 사용자를 만들고 정의 된 OrganizationalUnit에 넣으려면 Powershell 스크립트를 만들고 있습니다.powershell에서 필드 내용을 추출하는 방법

  • 문제 : 스크립트의 끝에서, 나는에서 새로 만든 계정

잊으 사용할 하나 개 이상의 사용자 계정이 있는지 여부를 나열하는 순서로 보고서를 가지고 싶습니다 내 스크립트를 사용하려면 각 사용자마다 암호를 입력해야하지만 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 "의 값을 추출하고 싶습니다 "필드를 스크립트의 inital 사용자 테이블과 비교합니다.

    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 cmdlet에 대한 액세스 권한이 없습니까? 당신이 distinguishedName을 파싱 한 것을 보지 않았다면? dsquery는 PSObject를 반환하지 않으므로 그러한 객체를 처리 할 수 ​​없습니다. – 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을 cmdlet에 아니지만, 실행 "내 마음에서." 즉, PowerShell 개체를 파이프 라인으로 반환하지 않습니다. Kongstead의 메서드는 문자열 출력을 반환한다는 것을 알고 작동합니다. splitreplace을 사용하여 문자열을 조작하면 출력을 원하는 용도로 사용할 수 있습니다. 이 정보를 얻는 다른 두 가지 방법은 AD 모듈 (데스크탑 OS에서는 RSAT)과 .Net의 ADSI 메소드를 사용하는 것입니다. 이 두 가지 모두 직접 사용할 수있는 데이터를 반환합니다.

AD cmdlet이 가장 쉽습니다. 모든 사용 중지 된 계정을 얻으려면 다음과 같은 모양이됩니다.

Search-ADAccount -AccountDisabled -SearchBase "dc=mydomain,dc=local" 
관련 문제