2014-07-23 68 views
0

當您嘗試在powershell中執行文件時,例如.\file,它似乎就像通過Invoke-Item cmdlet執行它一樣。是否有可能在我的PowerShell配置文件中覆蓋,替換或增強此功能?我希望能夠通過擴展/用戶提示默認開放行爲來替換檢查,默認情況下更智能。試圖執行文件時可以重寫powershell的行爲嗎?

+0

你能提供一個例子嗎?有沒有理由不能更改默認的文件關聯? – HAL9256

+0

例如,如果我想根據其內容或元數據更改文件的執行方式。在最基本的層面上,比如shebang在linux中的工作方式會很好,第一行可以決定如何執行的文件。如果我的系統具有足夠的靈活性,我可以指定「如果文件是一個zip文件少於很多MB提取到當前目錄和CD」的檢查,我就不會很好。我知道我可以在PowerShell中檢查所有這些東西,我只是無法弄清楚如何掛鉤到實際的對象調用來覆蓋默認調用。 –

回答

0

在Windows中解決類似問題的規範方法是將相關類型的默認操作更改爲實現您要應用於該類型文件的邏輯的自定義腳本/程序。

更改操作可以通過添加更改幾個註冊表項來輕鬆完成。舉例zip文件:

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\CompressedFolder\shell] 
;change default action 
@="Open2" 

[HKEY_CLASSES_ROOT\CompressedFolder\shell\Open2] 
;change label of this action 
@="My Custom Action" 

[HKEY_CLASSES_ROOT\CompressedFolder\shell\Open2\command] 
;command for this action 
@="powershell.exe -File \"C:\path\to\zip-handler.ps1\" \"%1\"" 

該腳本可能(例如)是這樣的:

$zip = Get-Item $args[0] 

if ($zip.Length -le 10MB) { 
    [Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') | Out-Null 
    $targetFolder = Split-Path -Parent $zip.FullName 
    [IO.Compression.ZipFile]::ExtractToDirectory($zip.FullName, $targetFolder) 
} else { 
    explorer.exe $zip.FullName 
} 
相關問題