Cómo acceder a las propiedades de la salida del Registro Get-ChildItem

Cómo acceder a las propiedades de la salida del Registro Get-ChildItem

Usando el siguiente código, obtengo Name& LastLogoncompleto, pero no ProfilePath.

Add-RegKeyMembereshttps://gallery.technet.microsoft.com/scriptcenter/Get-Last-Write-Time-and-06dcf3fb.

Intenté acceder ProfileImagePathcon $Profile.Properties.ProfileImagePath, $Profile.Name.ProfileImagePathy 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.RegistryKeyEl 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 elLastWriteTimede una clave de registro y luego etiquetándola comoLastLogon. Creo que esa es una lógica defectuosa.

información relacionada