2017-08-26 38 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

相關問題