Powershell : pwdLastSet을 어떻게 쿼리하고 이해합니까? “LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net” | Format-List

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 속성의 출력을 쿼리하고 형식을 지정하는 가장 좋은 방법은 무엇입니까?



답변

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

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)로 많은 작업을 수행하려는 경우 스냅 인을 가져 와서 사용할 수 있습니다.


답변

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

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

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


답변

더 쉬운 방법이 있습니다.

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))


답변

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

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


답변

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

파워 쉘 열기

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

add-PSSnapin quest.activeroles.admanagement

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

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


답변

스크립트에 ConvertADSLargeInteger 함수를 추가하면 여기에서 얻을 수 있습니다.

PowerShell : Active Directory IADSLargeInteger를 System.Int64로 변환

사용 방법은 다음과 같습니다.

$user = [adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net"
[datetime]::FromFileTimeUtc((ConvertADSLargeInteger $user.pwdlastset.value))


답변

아마도 passwordLastChanged 속성을 사용하는 것을보아야 할 것입니다. 자세한 정보는 여기를 참조하십시오 : http://www.microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx