Usando el siguiente código, obtengo Name
& LastLogon
completo, pero no ProfilePath
.
Add-RegKeyMember
eshttps://gallery.technet.microsoft.com/scriptcenter/Get-Last-Write-Time-and-06dcf3fb.
Intenté acceder ProfileImagePath
con $Profile.Properties.ProfileImagePath
, $Profile.Name.ProfileImagePath
y otros, pero todos regresan en blanco (podría ser nulo). ¿Cómo es que este aparentemente objeto hace que estas propiedades estén disponibles?
$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
Respuesta1
Echa un vistazo aTrabajar con entradas de registropara más detalles, pero elWin32.RegistryKey
El tipo no contiene todos los datos para los valores en esa clave, solo el "Propiedad"NoatePropiedadque enumera los nombres de los valores.
$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
...
Para ver las entradas clave y sus valores, puede utilizarGet-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...}
Una forma alternativa de acceder a los datos, y probablemente la mejor opción en su caso, es laRegistryKey.GetValue()
método de laWin32.RegistryKey
. Entonces tu código se convertiría en:
...
foreach($Profile in $Profiles)
{
$ThisProfileInfo = @{
Name = $Profile.Name
LastLogon = $Profile.LastWriteTime
ProfilePath = $Profile.GetValue('ProfileImagePath')
}
$Profile
}
...
Además, estás recuperando elLastWriteTime
de una clave de registro y luego etiquetándola comoLastLogon
. Creo que esa es una lógica defectuosa.