아래 코드를 사용하면 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
. 나는 그것이 잘못된 논리라고 생각한다.