2013-07-18 44 views
1

是否可以禁用打開文件對話窗口的某些部分,如創建新文件夾按鈕?Powershell - 禁用「打開文件」對話框的某些部分

我使用的代碼示例(從http://blogs.technet.com/b/heyscriptingguy/archive/2009/09/01/hey-scripting-guy-september-1.aspx拍攝)是:

Function Get-FileName($initialDirectory) 
{ 
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | 
Out-Null 

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
$OpenFileDialog.initialDirectory = $initialDirectory 
$OpenFileDialog.filter = "All files (*.*)| *.*" 
$OpenFileDialog.ShowDialog() | Out-Null 
$OpenFileDialog.filename 
} #end function Get-FileName 

Get-FileName -initialDirectory "c:\fso" 

感謝

+0

我的系統暫時不運行,所以無法測試,但看在MSDN的參考資料中,我不這麼認爲,除了控制通話的安全性 - 如果用戶沒有足夠的權限來創建一個文件夾,它可能足夠聰明,可以隱藏或灰掉「新建文件夾」按鈕。 –

+2

由於您使用的是.NET類,這實際上比PowerShell更像是一個.NET問題。你可以試着在C#或VB.NET中尋找如何做到這一點;如果你發現任何東西,那麼你只需要翻譯它。 – jpmc26

+0

謝謝大家。我想我會考慮安全性和權限來限制這一點。 –

回答

0

OK,按照意見,你的腳本這個修改禁止訪問創建中的文件夾目標目錄,同時對話框處於活動狀態,然後在功能完成前刪除結束處的塊:

Function Get-FileName($initialDirectory) 
{ 
<#DENY CreateDirectories privilege 
    to currently logged on security principal#> 

$acl = get-acl $initialDirectory 

$right = "CreateDirectories" 

$principal = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name 

$denyrule = New-Object System.Security.AccessControl.FileSystemAccessRule($principal,$right,"DENY") 

$acl.AddAccessRule($denyrule) 

set-acl $initialDirectory $acl 

[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | 
Out-Null 

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
$OpenFileDialog.initialDirectory = $initialDirectory 
$OpenFileDialog.filter = "All files (*.*)| *.*" 
$OpenFileDialog.ReadOnlyChecked = $true 
$OpenFileDialog.ShowDialog() | Out-Null 
$OpenFileDialog.filename 

#remove block now 
$acl.RemoveAccessRule($denyrule) 

set-acl $initialDirectory $acl 

} #end function Get-FileName 


Get-FileName -initialDirectory "c:\fso" 
+0

這太好了,謝謝格雷厄姆! –

+0

我很高興,因爲註冊表路線是破產。忽略了一段時間,在PowerShell中處理註冊表權限要比應該更加努力,我發現,當值被刪除時,隱藏了「新建文件夾」按鈕,而不是來自「OpenFileDialog」。有一個'ShowNewFolderButton'布爾值用於控制該按鈕的顯示,但僅限於'FolderBrowserDialog',這對您來說毫無用處! –