如何访问 Get-Child Registry 输出的属性

How to access properties of Get-Child Registry output

使用下面的代码,我填充了 Name & LastLogon,但没有填充 ProfilePath

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

我尝试使用 $Profile.Properties.ProfileImagePath$Profile.Name.ProfileImagePath 和其他方法访问 ProfileImagePath,但它们都 return 为空(可能为空)。这个看似对象到底是如何使这些属性可用的?

$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

这是因为 [Microsoft.Win32.RegistryKey] 对象 returns 属性为字符串数组。您应该简单地从对象本身检索值 ProfileImagePath :

ProfilePath=$Profile.GetValue("ProfileImagePath")

请查看以下对脚本的调整。

您可以使用GetValue.

方法拉取属性的子值

我还调整了存储每次迭代和输出值 post 的方式 foreach 循环,因为上面的示例将只输出循环之前的每个 $profile .

我没有用 Add-RegKeyMember 进行测试,因此我无法确认这是否会拉动 LastWriteTime 属性,但我可以确认这会拉动 [=16] =] 属性.

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

$ProfileData = @()

foreach($Profile in $Profiles){
    $ThisProfileInfo = $null

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

    $ProfileData += $ThisProfileInfo
}

$ProfileData