2013-07-18 40 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',这对您来说毫无用处! –