2014-10-14 3 views
0

:재귀 파일 검색시에 폴더를 제외 나는 다음을 수행 PowerShell을 얻기 위해 고전을 면치 못하고 한 시간 동안

를 사용하여 기본 디렉토리 C : \ 사용자의 AppData 폴더를 제외한 모든 폴더를 반복적으로 이동 각 사용자 dir의 이름과 사용자 이름을 제외하면 다음과 같습니다.

$exclude = @('Administrator', 'All Users', 'Default', 'Default User', 'Public', 'TEMP') 

출력에 특정 확장명의 모든 파일이 나열되어야합니다.

UPDATE 내가 출력에 이러한 추가 문을 추가 할 수 있습니까

?

Get-Childitem $Path -Include $extensions -Recurse -Force -ErrorAction SilentlyContinue | 
    Select Name,Directory,@{Name="Owner";Expression={(Get-ACL $_.Fullname).Owner}},CreationTime,LastAccessTime, Length 

2. 업데이트

네트워크의 원격 호스트와 일치하기 위해 패턴을 설정하는 올바른 방법은 무엇입니까?

$exclude_pattern = "\\hostname\\c$\\Users\\(" + ($exclude -join '|') + ")"; 

호스트 이름을 내 컴퓨터 이름으로 바꾸면 일치하지 않습니다. 선이 지역의 패턴에 비해 잘못 어디서 볼 수 없습니다 :

C:\\Users\\(Administrator|All Users|Default|Default User|Public|TEMP|Saargummi|dvop|leasingadmin|cenit|cadop|[^\\]+\\AppData) 
\\hostname\\c$\\Users\\(Administrator|All Users|Default|Default User|Public|TEMP|Saargummi|dvop|leasingadmin|cenit|cadop|[^\\]+\\AppData) 

3. 업데이트

대문자로 작성된 확장을 포함하는 스마트 방법이 있나요? 예를 들어, '.wav', '.WAV'를 써야합니까?

답변

2
$exclude = @("Administrator", 
      "All Users", 
      "Default", 
      "Default User", 
      "Public", 
      "TEMP", 
      "[^\\]+\\AppData") 

$extensions = "*.ini" # replace this with your extension 
$hostname = "hostname" # replace this with your hostname 

$exclude_pattern = "\\\\{0}\\C[$]\\Users\\({1})" ` 
    -f $hostname, ($exclude -join '|') 
$path = "\\{0}\C$\Users" -f $hostname 

Get-ChildItem -Path $path -Force -Recurse -Include $extensions ` 
    -ErrorAction "SilentlyContinue" ` 
    | Where-Object { $_.PSIsContainer -eq $false } ` 
    | Where-Object { $_.FullName -notmatch $exclude_pattern } ` 
    | ForEach-Object { 
     $_ | Select-Object -Property @(
      "Name", 
      "Directory", 
      @{Label="Owner";Expression={(Get-ACL $_.Fullname).Owner}},      
      "CreationTime", 
      "LastAccessTime", 
      "Length" 
     ) 
    } 

[업데이트 1] : 업데이트 된 질문에 따라 출력 형식이 추가되었습니다. 하나의 정규식 패턴에서 모든 제외 항목을 병합하여 단축되었습니다.

[업데이트 2] : UNC 경로로 변경되었습니다. 소유자는 SID로 표시 될 수 있습니다. SID를 사용자 이름으로 변환하려면 here을보십시오.

[업데이트 3] : PowerShell은 기본적으로 대/소문자를 구분하지 않으므로 동일한 확장명을 두 번 이상 추가 할 필요가 없습니다.

+0

스크립트에 감사드립니다. 오류 : C : \ Users \ TEMP에 대한 액세스가 거부되었습니다. 왜 그것이 배제되지 않았는가? –

+0

아주 이상합니다. '-ErrorAction "SilentlyContinue"는 접근 거부 및 기타 비 중단 오류를 억제해야합니다. –

+0

최고입니다. 업데이트에 감사드립니다. 관리자 권한으로 ISE를 실행하면 오류가 사라집니다. –