2013-07-18 3 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의 레퍼런스에서 나는 보안의 제어 이외에 그렇게 생각하지 않는다. 사용자가 폴더를 생성 할만큼 충분히 특권이 없다면,'New Folder' 버튼을 숨기거나 회색으로 감출만큼 똑똑 할 것이다. . –

+2

당신이 .NET 클래스를 사용하고 있기 때문에 이것은 PowerShell보다 .NET 질문이 더 많습니다. C# 또는 VB.NET에서이 작업을 수행하는 방법을 찾을 수도 있습니다. 당신이 무엇인가를 발견하면, 당신은 단지 그것을 번역 할 필요가있을 것입니다. – jpmc26

+0

감사합니다. 보안 및 권한을 제한하는 방법으로 살펴 보겠습니다. –

답변

0
는 의견에 따라, 스크립트의 수정 된 버전은 내 폴더를 만들 수있는 권한을 확인하지 않습니다

대화 상자가 활성화되어있는 동안 대상 디렉토리가 닫히고 함수가 완료되기 전에 끝에있는 블록이 제거됩니다.

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

감사합니다. Graham! –

+0

레지스트리 경로가 바스트이기 때문에 기쁩니다. powershell에서 레지스트리 권한을 처리하는 데 훨씬 더 많은 노력이 필요하다는 것을 잠시 무시하면 값을 삭제할 때 찾은 키는 Windows 탐색기에서 '새 폴더'버튼을 숨기고 OpenFileDialog에서는 숨 깁니다. 그 버튼의 표시를 제어하기위한'ShowNewFolderButton' 부울 값이 있습니다 만, 여기에 당신에게 아무 소용이없는'FolderBrowserDialog'에 대해서만! –

관련 문제