Powershell : pwdLastSet을 어떻게 쿼리하고 이해합니까?


16

Active Directory 보안 그룹의 계정 그룹에 대한 마지막 비밀번호 변경을 가져와야하며, 이것이 PowerShell에 적합해야한다고 생각합니다.

지금은 이미보고있는 AD 계정에서 pwdLastSet 속성을 읽는 방법에 붙어 있습니다. 다음과 같이 간단한 것을 실행해도됩니다.

[adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net" | Format-List *

pwdLastSet의 결과는 다음과 같습니다 :

pwdLastSet            : {System.__ComObject}

pwdLastSet 속성의 출력을 쿼리하고 형식을 지정하는 가장 좋은 방법은 무엇입니까?

답변:


13

스냅인없이이 작업을 수행 할 수도 있습니다. 나는 이것을 시도하고 효과가 있었다 :

PS #> $ searcher = New-Object DirectoryServices.DirectorySearcher
PS #> $ searcher.Filter = "(& (samaccountname = user1))"
PS #> $ results = $ searcher.findone ()
PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0])

2009 년 6 월 10 일 수요일 오후 4:32:08

:이 같은 사용자 개체 설정 한 경우 나 또한의 pwdLastSet를위한 시스템 .__하여 ComObject을 얻을
= [ADSI] "LDAP $ 사용자를 : // CN = 사용자 1, OU = 직원, OU에 사용자 계정을 =, DC = ramalamadingdong, DC = 순 "

[System .__ ComObject] .InvokeMember () 및 reflection을 사용하여 $ user 객체에서 해당 pwdLastSet 값을 가져 오는 방법이 있어야하지만 제대로 얻을 수 없었습니다. 나는 그것을 이해하지 못했기 때문에 위의 예를 사용하여 계속 진행했습니다.

AD (또는 Exchange 또는 SQL Server)로 많은 작업을 수행하려는 경우 스냅 인을 가져 와서 사용할 수 있습니다.


1
PowerShell에서 다양한 간단한 작업을 수행하여 구문을 배우려고 노력했습니다. 나는 답을 보았던 모든 곳에서 애드 인을 사용하는 것이 다소 우울했습니다. 감사!
Bob

19

Windows 7 / Windows Server 2008 R2와 함께 제공되는 기본 제공 AD 커맨드 렛은 이제이 작업만으로도 충분합니다. Powershell 프롬프트에서 Windows 7의 경우 :

Import-Module ActiveDirectory
Get-ADUser 'user1' -properties PasswordLastSet | Format-List

"PasswordLastSet"속성은 실제 "pwdLastSet"속성의 번역 된 버전 인 것으로 보입니다.


PasswordLastSet에 어떤 값이 없다는 의미가 궁금합니다. 100 %는 처음에 비밀번호를 설정 한 이후로 변경이 없었 음을 의미합니까?
Mikhail

테스트 할 상자가 없지만 객체에 아직 암호가 설정되어 있지 않을 가능성이 큽니다.
Neobyte

@Mikhail, PasswordLastSet에 대한 값이없는 대부분의 경우 상승 된 프롬프트에서 명령을 실행하지 않습니다.
JPBlanc

3

더 쉬운 방법이 있습니다.

ADSI 개체에는 ConvertLargeIntegerToInt64라는 메서드가 있습니다. 타임 스탬프 속성 값을 쿼리하여 반환되는 System .__ Comobject가 아니라 ADSI 개체의 메서드 이므로 $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 ()가 작동하지 않습니다. 다음과 같이 호출해야합니다.

$user.ConvertLargeIntegerToInt64($user.pwdLastSet.value)

위의 Bratch에서 설명한 것처럼 LDAP 타임 스탬프를 읽을 수있는 날짜로 변환해야합니다. 이것은 ADSI 공급자가 반환 한 모든 타임 스탬프 속성 값에 대해 작동하며 ConvertLargeIntegerToInt64 메서드는 디렉토리 항목을 나타내는 모든 개체에 의해 노출됩니다.

이를 종합하면 다음은 비밀번호가 마지막으로 설정된 날짜를 얻는 방법입니다.

$user = [ADSI]'LDAP://cn=someusername,ou=someou,dc=somedomain,dc=com'
[datetime]::FromFileTime($user.ConvertLargeIntegerToInt64($user.pwdLastSet.value))

3

AD 컴퓨터를 표시하는 쉬운 방법은 다음과 같습니다.

Get-ADComputer -Filter *  -Properties name,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
  FT Name,DNSHostName,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp | 
    Out-File Computers.csv

1

설치 : http://www.quest.com/powershell/activeroles-server.aspx

파워 쉘 열기

다음 명령을 실행하십시오.

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft 표시 이름, 비밀번호 설정

첫 번째 명령은 방금 다운로드 한 퀘스트 스냅인을로드합니다. 시작 메뉴에서 바로 가기를 사용하여 퀘스트를 수행하는 경우에는이 작업을 수행 할 필요가 없습니다. 두 번째 명령은 모든 사용자 및 사용자 목록과 비밀번호가 마지막으로 변경된 시간을 가져옵니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.