Get-ChildItem 레지스트리 출력의 속성에 액세스하는 방법

Get-ChildItem 레지스트리 출력의 속성에 액세스하는 방법

아래 코드를 사용하면 Name& LastLogon가 채워지지만 ProfilePath.

Add-RegKeyMember~이다https://gallery.technet.microsoft.com/scriptcenter/Get-Last-Write-Time-and-06dcf3fb.

, 및 기타 항목 ProfileImagePath으로 액세스를 시도했지만 모두 공백(null일 수 있음)을 반환합니다. 도대체 어떻게 겉보기에 객체가 이러한 속성을 사용할 수 있게 만드는 것일까요?$Profile.Properties.ProfileImagePath$Profile.Name.ProfileImagePath

$Profiles = get-childitem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" | Add-RegKeyMember

foreach($Profile in $Profiles)
{

  $ThisProfileInfo = @{Name=$Profile.Name;
                     LastLogon=$Profile.LastWriteTime;
                     ProfilePath=$Profile.ProfileImagePath}
  $Profile
}

Name                           Property                                                                                                                                                       
----                           --------                                                                                                                                                       
S-1-5-18                       Flags            : 12                                                                                                                                          
                               ProfileImagePath : C:\WINDOWS\system32\config\systemprofile                                                                                                    
                               RefCount         : 1                                                                                                                                           
                               Sid              : {1, 1, 0, 0...}                                                                                                                             
                               State            : 0

답변1

보세요레지스트리 항목 작업더 자세히 말씀드리지만,Win32.RegistryKey유형에는 해당 키의 값에 대한 모든 데이터가 포함되지 않고 "재산"Noate속성값 이름을 나열합니다.

$ProfilePath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
$Profiles = Get-ChildItem $PRofilePath
$Profiles | Get-Member -MemberType NoteProperty
   TypeName: Microsoft.Win32.RegistryKey

Name          MemberType   Definition
----          ----------   ----------
Property      NoteProperty string[] Property=System.String[]
PSChildName   NoteProperty string PSChildName=S-1-5-18
...

주요 항목 및 해당 값을 보려면 다음을 사용할 수 있습니다.Get-ItemProperty:


$Profiles | Get-ItemProperty | select * -Exclude PS*
Flags            : 12
ProfileImagePath : C:\WINDOWS\system32\config\systemprofile
RefCount         : 1
Sid              : {1, 1, 0, 0...}
State            : 0

Flags            : 0
ProfileImagePath : C:\WINDOWS\ServiceProfiles\LocalService
State            : 0

Flags            : 0
ProfileImagePath : C:\WINDOWS\ServiceProfiles\NetworkService
State            : 0

ProfileImagePath                        : C:\Users\keith
Flags                                   : 0
State                                   : 0
Sid                                     : {1, 5, 0, 0...}
FullProfile                             : 1
Migrated                                : {96, 248, 201, 91...}
LocalProfileLoadTimeLow                 : 3360357489
LocalProfileLoadTimeHigh                : 30847106
ProfileAttemptedProfileDownloadTimeLow  : 0
ProfileAttemptedProfileDownloadTimeHigh : 0
ProfileLoadTimeLow                      : 0
ProfileLoadTimeHigh                     : 0
RunLogonScriptSync                      : 0
LocalProfileUnloadTimeLow               : 1652511590
LocalProfileUnloadTimeHigh              : 30847106

ProfileImagePath : C:\Users\LongUserName
Flags            : 0
State            : 4
Sid              : {1, 5, 0, 0...}
FullProfile      : 1
Migrated         : {144, 179, 238, 90...}

ProfileImagePath : C:\Users\Administrator
Flags            : 0
State            : 4
Sid              : {1, 5, 0, 0...}
FullProfile      : 1
Migrated         : {96, 87, 195, 93...}

데이터에 액세스하는 다른 방법이며 귀하의 경우 더 나은 선택은 다음과 같습니다.RegistryKey.GetValue()의 방법Win32.RegistryKey. 따라서 귀하의 코드는 다음과 같습니다.

...
foreach($Profile in $Profiles)
{

  $ThisProfileInfo = @{
      Name        = $Profile.Name
      LastLogon   = $Profile.LastWriteTime
      ProfilePath = $Profile.GetValue('ProfileImagePath')
  }
  $Profile
}
...

또한 귀하는LastWriteTime레지스트리 키를 복사한 다음 다음과 같이 레이블을 지정합니다.LastLogon. 나는 그것이 잘못된 논리라고 생각한다.

관련 정보