Share via


파일, 폴더, 레지스트리 키 작업

이 샘플은 Windows 플랫폼에만 적용됩니다.

PowerShell에서는 명사 항목을 사용하여 PowerShell 드라이브에 있는 항목을 나타냅니다. PowerShell FileSystem 공급자를 처리할 때 Item은 파일, 폴더 또는 PowerShell 드라이브일 수 있습니다. 이러한 항목을 나열하고 작업하는 것은 대부분의 관리 설정에서 중요한 기본 작업이므로 이러한 작업을 자세히 설명하려고 합니다.

파일, 폴더, 레지스트리 키 열거

특정 위치에서 항목 컬렉션을 가져오는 것은 일반적인 작업 Get-ChildItem 이므로 cmdlet은 폴더와 같은 컨테이너 내에 있는 모든 항목을 반환하도록 특별히 설계되었습니다.

C:\Windows 폴더에 직접 포함되어 있는 모든 파일과 폴더를 반환하려면 다음과 같이 입력합니다.

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-16   8:10 AM          0 0.log
-a---        2005-11-29   3:16 PM         97 acc1.txt
-a---        2005-10-23  11:21 PM       3848 actsetup.log
...

목록은 명령을 입력하거나 ls UNIX 명령 셸에 cmd.exe명령을 입력 dir 할 때 표시되는 것과 유사합니다.

Get-ChildItem cmdlet의 매개 변수를 사용하여 복잡한 목록을 표시할 수 있습니다. 다음과 같이 입력하여 Get-ChildItem cmdlet의 구문을 표시할 수 있습니다.

Get-Command -Name Get-ChildItem -Syntax

이러한 매개 변수를 혼합하고 일치하여 고도로 사용자 지정된 출력을 가져올 수 있습니다.

모든 포함된 항목 나열

Windows 폴더 내의 항목과 하위 폴더 내에 포함된 항목을 모두 보려면 다음의 Get-ChildItemRecurse 매개 변수를 사용합니다. 목록에는 Windows 폴더 내의 모든 항목과 하위 폴더의 항목이 표시됩니다. 예시:

PS> Get-ChildItem -Path C:\WINDOWS -Recurse

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
...

이름별로 항목 필터링

항목의 이름만 표시하려면 Get-ChilditemName 매개 변수를 사용합니다.

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

숨겨진 항목을 강제로 나열

파일 탐색기 또는 cmd.exe에서 숨겨진 항목은 Get-ChildItem 명령의 출력에 표시되지 않습니다. 숨겨진 항목을 표시하려면 .의 Get-ChildItemForce 매개 변수를 사용합니다. 예시:

Get-ChildItem -Path C:\Windows -Force

Get-ChildItem 명령의 일반적인 동작을 강제로 재정의할 수 있으므로 이 매개 변수의 이름은 Force입니다. Force는 cmdlet이 일반적으로 수행하지 않는 작업을 강제로 수행하는 데 널리 사용되는 매개 변수입니다. 단, 시스템 보안을 저해하는 작업은 수행할 수 없습니다.

와일드카드와 항목 이름 일치

Get-ChildItem 명령은 나열할 항목의 경로에서 wild카드s를 허용합니다.

와일드카드 일치는 PowerShell 엔진에서 처리되므로 와일드카드를 허용하는 모든 cmdlet은 동일한 표기법을 사용하고 일치 동작이 동일합니다. PowerShell 와일드카드 표기법은 다음과 같습니다.

  • 별표(*)는 0개 이상의 모든 문자를 일치시킵니다.
  • 물음표(?)는 정확히 한 문자와 일치합니다.
  • 왼쪽 대괄호([) 문자 및 오른쪽 대괄호(]) 문자는 일치시킬 문자 집합을 묶습니다.

다음은 wild카드 사양의 작동 방식에 대한 몇 가지 예입니다.

Windows 디렉터리에서 접미사가 .log 있는 모든 파일과 기본 이름에 정확히 5자의 파일을 찾으려면 다음 명령을 입력합니다.

PS> Get-ChildItem -Path C:\Windows\?????.log

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
...
-a---        2006-05-11   6:31 PM     204276 ocgen.log
-a---        2006-05-11   6:31 PM      22365 ocmsn.log
...
-a---        2005-11-11   4:55 AM         64 setup.log
-a---        2005-12-15   2:24 PM      17719 VxSDM.log
...

Windows 디렉터리에서 문자 x로 시작하는 모든 파일을 찾으려면 다음과 같이 입력합니다.

Get-ChildItem -Path C:\Windows\x*

이름이 "x" 또는 "z"로 시작하는 모든 파일을 찾으려면 다음을 입력합니다.

Get-ChildItem -Path C:\Windows\[xz]*

wild카드에 대한 자세한 내용은 about_Wild카드 참조하세요.

항목 제외

Get-ChildItemExclude 매개 변수를 사용하여 특정 항목을 제외할 수 있습니다. 이렇게 하면 단일 문에서 복잡한 필터링을 수행할 수 있습니다.

예를 들어 System32 폴더에서 Windows 시간 서비스 DLL을 찾으려고 하지만 DLL 이름이 “W”로 시작하고 “32”가 포함되어 있다는 것만 알고 있다고 가정합니다.

같은 w*32*.dll 식은 조건을 충족하는 모든 DLL을 찾을 수 있지만 파일을 추가로 필터링하고 win32 파일을 생략할 수 있습니다. win* 패턴과 함께 Exclude 매개 변수를 사용하여 해당 파일을 생략할 수 있습니다.

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*

    Directory: C:\WINDOWS\System32

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           3/18/2019  9:43 PM         495616 w32time.dll
-a---           3/18/2019  9:44 PM          35328 w32topl.dll
-a---           1/24/2020  5:44 PM         401920 Wldap32.dll
-a---          10/10/2019  5:40 PM         442704 ws2_32.dll
-a---           3/18/2019  9:44 PM          66048 wsnmp32.dll
-a---           3/18/2019  9:44 PM          18944 wsock32.dll
-a---           3/18/2019  9:44 PM          64792 wtsapi32.dll

Get-ChildItem 매개 변수 혼합

동일한 명령에서 cmdlet의 Get-ChildItem 여러 매개 변수를 사용할 수 있습니다. 매개 변수를 혼합하기 전에 wild카드 일치를 이해해야 합니다. 예를 들어 다음 명령은 결과를 반환하지 않습니다.

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

Windows 폴더에 문자 "z"로 시작하는 두 개의 DLL이 있더라도 결과가 없습니다.

와일드카드를 경로의 일부로 지정했기 때문에 결과가 반환되지 않습니다. 명령이 재귀적 Get-ChildItem 이었음에도 불구하고 cmdlet은 이름이 으로 끝나는 .dllWindows 폴더에 있는 항목으로 항목을 제한했습니다.

이름이 특수 패턴과 일치하는 파일에 대한 재귀 검색을 지정하려면 Include 매개 변수를 사용합니다.

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM       8261 zoneoc.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM     337920 zipfldr.dll