无法在 powershell 中的注册表项中传输文件路径 - HKCU PSDrive
Unable to pipe file path in registry item in powershell - HKCU PSDrive
首先post这里!
我是 powershell 的新手,一直在尝试编写一些脚本。
目前我正在尝试编写一个 powershell 脚本(PSVersion 5.1.15063.502)来搜索 Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹中的注册表以查找指向指定文件路径的任何条目。这样我就可以根据需要更改这些。使用 Set-ItemProperty
函数。
理想情况下,我想搜索用户 Shell 文件夹的 "Data" 部分
(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\*"}
我确定我在这里犯了一个基本错误,但似乎无法弄清楚。
我也试过 Get-ChildItem 了:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ |
Where { $_.Name -like "*User Shell Folders*" } | Select Property | Where { $_.Property -like "*Appdata*" } | Format-Wide
但是没有得到正确的输出:{AppData, Cache, Cookies, Desktop...}
我可以在查看硬盘的类似脚本上获得输出:
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参数不同造成的?任何建议将不胜感激。
我会尽量给你一些指示,因为这似乎是你正在寻找的。具体来说:
... to find any entries pointing to a specified file path
当您在注册表路径上使用 Get-ItemProperty 时,您从 PowerShell 取回了一个自定义对象,该对象将屏幕截图中的名称设置为 NoteProperty,并将注册表(您指向它们的数据)值设置为这些音符属性。您可以轻松验证这一点:
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
根据该信息,您可以创建一个新对象,该对象仅包含您通过过滤(例如 -match 运算符)查找的名称和数据值:
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
首先post这里!
我是 powershell 的新手,一直在尝试编写一些脚本。
目前我正在尝试编写一个 powershell 脚本(PSVersion 5.1.15063.502)来搜索 Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹中的注册表以查找指向指定文件路径的任何条目。这样我就可以根据需要更改这些。使用 Set-ItemProperty
函数。
理想情况下,我想搜索用户 Shell 文件夹的 "Data" 部分 (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\*"}
我确定我在这里犯了一个基本错误,但似乎无法弄清楚。
我也试过 Get-ChildItem 了:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ |
Where { $_.Name -like "*User Shell Folders*" } | Select Property | Where { $_.Property -like "*Appdata*" } | Format-Wide
但是没有得到正确的输出:{AppData, Cache, Cookies, Desktop...}
我可以在查看硬盘的类似脚本上获得输出:
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参数不同造成的?任何建议将不胜感激。
我会尽量给你一些指示,因为这似乎是你正在寻找的。具体来说:
... to find any entries pointing to a specified file path
当您在注册表路径上使用 Get-ItemProperty 时,您从 PowerShell 取回了一个自定义对象,该对象将屏幕截图中的名称设置为 NoteProperty,并将注册表(您指向它们的数据)值设置为这些音符属性。您可以轻松验证这一点:
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
根据该信息,您可以创建一个新对象,该对象仅包含您通过过滤(例如 -match 运算符)查找的名称和数据值:
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