Windows PowerShell은 명사 Item을 사용하여 Windows PowerShell 드라이브에서 찾은 항목을 참조합니다. Windows PowerShell 파일 시스템 공급자에서 사용할 경우 Item은 파일, 폴더 또는 Windows PowerShell 드라이브일 수 있습니다. 이러한 항목을 표시하고 사용하는 작업은 대부분의 관리 설정에서 중요한 기본 작업이므로 이 설명서에서 자세히 설명합니다.
파일, 폴더 및 레지스트리 키 열거(Get-ChildItem)
특정 위치에서 항목 컬렉션을 가져오는 작업이 일반 작업이 된 후 Get-ChildItem cmdlet은 폴더와 같은 컨테이너 내에서 찾은 모든 항목을 반환하도록 특별히 설계되었습니다.
C:\Windows 폴더 바로 아래에 들어 있는 모든 파일과 폴더를 반환하려면 다음과 같이 입력하십시오.
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows 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 ...
이 목록은 Cmd.exe에서 dir 명령을 입력하거나 UNIX 명령 셸에서 ls 명령을 입력한 경우에 표시되는 내용과 유사합니다.
Get-ChildItem cmdlet의 매개 변수를 사용하면 매우 복잡한 목록 작업을 수행할 수 있습니다. 이 설명서의 뒷부분에는 이러한 복잡한 목록 작업에 대한 몇 가지 시나리오가 나와 있습니다. Get-ChildItem cmdlet의 구문을 보려면 다음과 같이 입력하십시오.
PS> Get-Command -Name Get-ChildItem -Syntax
고도로 사용자 지정된 출력을 얻기 위해 이러한 매개 변수들은 혼합 및 일치시킬 수 있습니다.
포함된 모든 항목 표시(-Recurse)
Windows 폴더에 들어 있는 항목과 그 하위 폴더에 들어 있는 항목을 모두 보려면 Get-ChildItem의 Recurse 매개 변수를 사용하십시오. 그러면 다음과 같이 Windows 폴더에 들어 있는 항목과 그 하위 폴더에 들어 있는 항목이 모두 표시됩니다.
PS> Get-ChildItem -Path C:\WINDOWS -Recurse Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll ...
이름을 기준으로 항목 필터링(-Name)
항목의 이름만 표시하려면 다음과 같이 Get-Childitem의 Name 매개 변수를 사용하십시오.
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly ...
숨겨진 항목 강제 표시(-Force)
일반적으로 Windows 탐색기나 Cmd.exe에 표시되지 않는 항목은 Get-ChildItem 명령의 출력에도 표시되지 않습니다. 숨겨진 항목을 표시하려면 Get-ChildItem의 Force 매개 변수를 사용하십시오. 예를 들면 다음과 같습니다.
Get-ChildItem -Path C:\Windows -Force
이 매개 변수의 이름은 Get-ChildItem 명령의 정상적인 동작을 강제로 무시할 수 있으므로 Force입니다. Force 매개 변수는 cmdlet이 일반적으로 수행하지 않는 작업을 강제로 수행하기 위해 널리 사용되는 매개 변수입니다.
와일드카드로 항목 이름 일치
The Get-ChildItem 명령은 표시할 항목의 경로에 와일드카드를 허용합니다.
와일드카드 일치가 Windows PowerShell 엔진에 의해 처리되므로 와일드카드를 허용하는 모든 cmdlet은 동일한 표기법과 일치 동작을 사용합니다. Windows PowerShell 와일드카드 표기법에는 다음과 같은 문자가 사용됩니다.
-
별표(*) – 0개 이상의 문자와 일치시킵니다.
-
물음표(?) - 정확히 하나의 문자와 일치시킵니다.
-
왼쪽 대괄호([) 문자와 오른쪽 대괄호(]) 문자 – 일치시킬 일련의 문자를 묶습니다.
다음은 와일드카드를 지정하는 방법을 보여 주는 몇 가지 예제입니다.
Windows 디렉터리에서 파일 확장명이 .log이고 기본 이름이 정확히 5자인 파일을 모두 찾으려면 다음 명령을 입력하십시오.
PS> Get-ChildItem -Path C:\Windows\?????.log Directory: Microsoft.Windows 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]*
항목 제외(-Exclude)
Get-ChildItem의 Exclude 매개 변수를 사용하여 특정 항목을 제외시킬 수 있습니다. 이 기능을 사용하면 단일 문으로 복잡한 필터링을 수행할 수 있습니다.
예를 들어 System32 폴더에서 Windows 시간 서비스 DLL을 찾으려고 하는데, DLL 이름이 "W"로 시작하고 이름에 "32"가 포함되어 있다는 것만 생각날 경우 필터링을 수행할 수 있습니다.
w*32*.dll과 같은 식은 조건을 만족하는 모든 DLL을 찾지만 이름에 "95" 또는 "16"이 포함되어 있는 Windows 95 및 16비트 Windows 호환 DLL도 반환할 수 있습니다. 다음과 같이 Exclude 매개 변수를 *[9516]* 패턴과 함께 사용하여 이러한 이름을 가진 파일을 제외시킬 수 있습니다.
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude *[9516]*
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 174592 w32time.dll
-a--- 2004-08-04 8:00 AM 22016 w32topl.dll
-a--- 2004-08-04 8:00 AM 101888 win32spl.dll
-a--- 2004-08-04 8:00 AM 172032 wldap32.dll
-a--- 2004-08-04 8:00 AM 264192 wow32.dll
-a--- 2004-08-04 8:00 AM 82944 ws2_32.dll
-a--- 2004-08-04 8:00 AM 42496 wsnmp32.dll
-a--- 2004-08-04 8:00 AM 22528 wsock32.dll
-a--- 2004-08-04 8:00 AM 18432 wtsapi32.dll
Get-ChildItem 매개 변수 혼합
동일한 명령에서 Get-ChildItem cmdlet의 매개 변수를 여러 개 사용할 수 있습니다. 매개 변수를 혼합하려면 먼저 와일드카드 일치에 대해 알고 있어야 합니다. 예를 들어 다음 명령은 결과를 반환하지 않습니다.
PS> Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
이 경우 Windows 폴더에 "z" 문자로 시작하는 DLL 두 개가 들어 있어도 아무 결과도 반환되지 않습니다.
아무 결과도 반환되지 않는 이유는 와일드카드를 경로의 일부로 지정했기 때문입니다. 위의 명령을 반복해서 실행해도 Get-ChildItem cmdlet은 Windows 폴더에서 이름이 ".dll"로 끝나는 항목만 반환합니다.
이름이 특수 패턴과 일치하는 파일을 반복해서 검색하려면 다음과 같이 -Include 매개 변수를 사용하십시오.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 8261 zoneoc.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 337920 zipfldr.dll