2017-08-26 39 views
0

第一篇文章在这里!无法在PowerShell中管理注册表项目中的文件路径 - HKCU PSDrive

我对PowerShell相当陌生,一直在尝试编写几个脚本。

目前我正在尝试编写一个PowerShell脚本(PSVersion 5.1.15063.502)来搜索Computer \ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \用户Shell文件夹中的注册表以查找指向指定的任何条目文件路径。以便我可以根据需要更改这些。使用Set-ItemProperty函数。

理想我想搜索的“数据”部分用户Shell文件夹现在 (see picture).

当我运行Get-ItemProperty功能 - 我得到的文件夹的输出,如下列:

PS C:\WINDOWS\system32> Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" 


*AppData        : C:\Users\RD\AppData\Roaming 
Cache         : C:\Users\RD\AppData\Local\Microsoft\Windows\INetCache 
Cookies        : C:\Users\RD\AppData\Local\Microsoft\Windows\INetCookies 
Desktop        : C:\Users\RD\Desktop 
Favorites        : C:\Users\RD\Favorites 
History        : C:\Users\RD\AppData\Local\Microsoft\Windows\History 
Local AppData       : C:\Users\RD\AppData\Local 
My Music        : C:\Users\RD\Music 
My Pictures       : C:\Users\RD\Pictures 
My Video        : C:\Users\RD\Videos 
NetHood        : C:\Users\RD\AppData\Roaming\Microsoft\Windows\Network Shortcuts 
Personal        : C:\Users\RD\Documents 
PrintHood        : C:\Users\RD\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 
Programs        : C:\Users\RD\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
Recent         : C:\Users\RD\AppData\Roaming\Microsoft\Windows\Recent 
SendTo         : C:\Users\RD\AppData\Roaming\Microsoft\Windows\SendTo 
Start Menu        : C:\Users\RD\AppData\Roaming\Microsoft\Windows\Start Menu 
Startup        : C:\Users\RD\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
Templates        : C:\Users\RD\AppData\Roaming\Microsoft\Windows\Templates 
{374DE290-123F-4565-9164-39C4925E467B} : C:\Users\RD\Downloads 
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders 
PSParentPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer 
PSChildName       : User Shell Folders 
PSDrive        : HKCU 
PSProvider        : Microsoft.PowerShell.Core\Registry* 

我的问题似乎是我想如何管这个函数提供项目的输出列为“* Appdata \”。

我试过以下,但得不到任何输出:

Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" | Where { $_.Data -eq "*AppData\*"} 

我相信我在这里做一个基本的错误,但似乎无法推测出来。

香港专业教育学院还试图获取 - ChildItem这个:

Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ | 
Where { $_.Name -like "*User Shell Folders*" } | Select Property | Where { $_.Property -like "*Appdata*" } | Format-Wide 

但没有得到正确的输出只是:{AppData的,高速缓存,饼干,桌面...}

我可以得到输出一个类似的脚本看着硬盘:

PS C:\WINDOWS\system32> Get-ItemProperty -Path "C:\Users\RD\Documents" | Where { $_.Name -like "*Documents"} 


    Directory: C:\Users\RD 


Mode    LastWriteTime   Length Name                                      
----    -------------   ------ ----                                      
d-r---  26/08/2017  13:00    Documents 

也许它是由于PSDrive参数的差异?任何建议将大量赞赏。

+0

你说你刚刚开始,你知道如何使用| Get-member? –

+0

而不是给你一个脚本,会做你会怎么做,我张贴的方式,我会去寻找该怎么做。 –

回答

2

我会尽量给你一些指示,因为这似乎是你在找什么。特别是在这:

...找到指向指定的文件路径

当您使用GET-ItemProperty注册表路径上的任何条目,您从PowerShell中回来的自定义对象集合NoteProperty截图中的名称以及注册表(数据如您指向的那样)作为这些noteproperties的值。你可以很容易地验证这一点:

PS C:\> Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"| Get-member 


    TypeName: System.Management.Automation.PSCustomObject 

Name         MemberType Definition 
----         ---------- ---------- 
Equals         Method  bool Equals(System.Object obj) 
GetHashCode       Method  int GetHashCode() 
GetType        Method  type GetType() 
ToString        Method  string ToString() 
AppData        NoteProperty string AppData=C:\Users\adil\AppData\Roaming 
Cache         NoteProperty string Cache=C:\Users\adil\AppData\Local\Microsoft\Windows\INetCache 
Cookies        NoteProperty string Cookies=C:\Users\adil\AppData\Local\Microsoft\Windows\INetCookies 
Desktop        NoteProperty string Desktop=C:\Users\adil\Desktop 
Favorites        NoteProperty string Favorites=C:\Users\adil\Favorites 

那么你如何能够根据您的搜索条件访问NoteProperty值?您可以在对象看看在什么它提供看(缩短只是我们关心的):

(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders").psobject 


    TypeName: System.Management.Automation.PSMemberSet 

Name    MemberType Definition 
----    ---------- ---------- 
Methods    Property 
Properties   Property 

如果你看一看成员或属性,你会看到现在的集合列出两个名称和该注册表项的值,你看:

PS C:\Users\adil> (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders").psobject.properties |select -first 3 


MemberType  : NoteProperty 
IsSettable  : True 
IsGettable  : True 
Value   : C:\Users\adil\AppData\Roaming 
TypeNameOfValue : System.String 
Name   : AppData 
IsInstance  : True 

MemberType  : NoteProperty 
IsSettable  : True 
IsGettable  : True 
Value   : C:\Users\adil\AppData\Local\Microsoft\Windows\INetCache 
TypeNameOfValue : System.String 
Name   : Cache 
IsInstance  : True 

MemberType  : NoteProperty 
IsSettable  : True 
IsGettable  : True 
Value   : C:\Users\adil\AppData\Local\Microsoft\Windows\INetCookies 
TypeNameOfValue : System.String 
Name   : Cookies 
IsInstance  : True 

根据掌握的信息,您可以创建一个新的对象,只有通过筛选有你要找的人的名字和数据值,说, - 匹配运算符:

PS C:\Users\adil> (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders").psobject.Properties| ? {$_.value -match 'appdata'}|select Name,Value 

Name   Value 
----   ----- 
AppData  C:\Users\adil\AppData\Roaming 
Cache   C:\Users\adil\AppData\Local\Microsoft\Windows\INetCache 
Cookies  C:\Users\adil\AppData\Local\Microsoft\Windows\INetCookies 
History  C:\Users\adil\AppData\Local\Microsoft\Windows\History 
Local AppData C:\Users\adil\AppData\Local 
NetHood  C:\Users\adil\AppData\Roaming\Microsoft\Windows\Network Shortcuts 
PrintHood  C:\Users\adil\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 
Programs  C:\Users\adil\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
Recent  C:\Users\adil\AppData\Roaming\Microsoft\Windows\Recent 
SendTo  C:\Users\adil\AppData\Roaming\Microsoft\Windows\SendTo 
Start Menu C:\Users\adil\AppData\Roaming\Microsoft\Windows\Start Menu 
Startup  C:\Users\adil\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
Templates  C:\Users\adil\AppData\Roaming\Microsoft\Windows\Templates 
+0

感谢你的Adil!这正是我正在寻找的。伟大的功能Get-Member!非常感激 :) – RD2017

相关问题