簡體   English   中英

通過Powershell更新Windows中所有文件擴展名的上下文菜單需要花費很長時間

[英]Update context menu of all file extensions in Windows via powershell takes long time

僅為公司開發自己的應用程序,我們已經開發了用於從共享驅動器安裝的腳本。 除了安裝本身之外,腳本還應該在特定用戶的注冊表( HKEY_CURRENT_USER )中創建/更新值。

這些值是分開的:

  • 目錄( HKCU:\\Software\\Classes\\Directory
  • 所有文件擴展名( HKCU:\\Software\\Classes\\*

對於目錄文件夾,更新是立即進行的,對於擴展名,更新似乎需要花費一些時間,具體取決於計算機硬件(從40秒到2分鍾)。

現在,在注冊表中僅為名為*的文件夾創建“條目”很麻煩。 我有一個要解決的問題( PowerShell:如何在文件/文件夾中創建名為“ *”(星號/星號)的選擇器? )。

忽略上面的問題,我們找到了一些解決string path如何工作的解決方案,但是我不確定代碼背后發生了什么,也不知道為什么要花這么長時間。

# Directory
New-Item -Path "HKCU:\Software\classes\Directory" -Name "shell" | Out-Null
# All Files Extension
New-Item -Path "HKCU:\Software\classes\[*]" -Name "shell" | Out-Null

一個想法是[*]解決方案實際上遍歷了所有文件擴展名,但是注冊表本身在*文件夾下顯示了此NewItem ,而在特定擴展名下未顯示:

注冊表截圖

關於此的另一種想法是,當我們擁有一個注冊表文件( *.reg )時,通過運行該文件,可立即添加注冊表項並解決問題。


問題:

  • 當我們運行查詢以在[*]選擇器下添加條目時,實際上發生了什么?
  • 如何優化此過程以減少在注冊表中為所有文件的擴展名創建新文件夾的時間?

懷疑發生的是由於通配符, New-Item調用中的-Path是遞歸的。 因此,延遲。

這是解決該問題的方法:

Set-Location -LiteralPath "HKCU:\Software\classes\*"
New-Item -Name "shell"

如果未明確傳遞給函數, New-Item -Path 當前位置用作-Path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM