Используя приведенный ниже код, я получаю Name
& LastLogon
заполненный, но не ProfilePath
.
Add-RegKeyMember
являетсяhttps://gallery.technet.microsoft.com/scriptcenter/Get-Last-Write-Time-and-06dcf3fb.
Я пробовал получить доступ ProfileImagePath
с помощью $Profile.Properties.ProfileImagePath
, $Profile.Name.ProfileImagePath
, и других, но все они возвращают пустое значение (может быть null). Как, черт возьми, этот, казалось бы, объект делает эти свойства доступными?
$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
type не содержит всех данных для значений в этом ключе, только "Свойство"NoatePropertyв котором перечислены имена значений.
$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
Я думаю, что это ошибочная логика.