Windows PowerShell에서는 파일 시스템 드라이브의 파일 및 폴더와 Windows PowerShell 레지스트리 드라이브의 레지스트리와 같이 Windows PowerShell 드라이브에 표시되는 요소를 항목이라고 합니다. 이러한 항목에 사용되는 cmdlet의 이름에는 명사 Item이 포함됩니다.

Get-Command -Noun Item 명령을 실행하면 다음과 같이 아홉 개의 Windows PowerShell 항목 cmdlet에 대한 내용이 출력됩니다.

PS> Get-Command -Noun Item

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Clear-Item                      Clear-Item [-Path] <String[]...
Cmdlet          Copy-Item                       Copy-Item [-Path] <String[]>...
Cmdlet          Get-Item                        Get-Item [-Path] <String[]> ...
Cmdlet          Invoke-Item                     Invoke-Item [-Path] <String[...
Cmdlet          Move-Item                       Move-Item [-Path] <String[]>...
Cmdlet          New-Item                        New-Item [-Path] <String[]> ...
Cmdlet          Remove-Item                     Remove-Item [-Path] <String[...
Cmdlet          Rename-Item                     Rename-Item [-Path] <String>...
Cmdlet          Set-Item                        Set-Item [-Path] <String[]> ...

새 항목 만들기(New-Item)

파일 시스템에서 새 항목을 만들려면 New-Item cmdlet을 사용해야 합니다. 이때 Path 매개 변수 다음에 항목의 경로를 입력하고 ItemType 매개 변수 다음에 값으로 "file" 또는 "directory"를 입력해야 합니다.

예를 들어 C:\Temp 디렉터리에 "New.Directory"라는 새 디렉터리를 만들려면 다음과 같이 입력하십시오.

PS> New-Item -Path c:\temp\New.Directory -ItemType Directory

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

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  11:29 AM            New.Directory

파일을 만들려면 ItemType 매개 변수의 값을 "file"로 변경합니다. 예를 들어 New.Directory 디렉터리에 "file1.txt"라는 파일을 만들려면 다음과 같이 입력하십시오.

PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

위와 동일한 방법을 사용하여 새 레지스트리 키를 만들 수 있습니다. 사실 Windows 레지스트리에는 키 항목 유형만 있기 때문에 레지스트리 키는 더 쉽게 만들 수 있습니다(레지스트리 입력 항목은 항목 속성임). 예를 들어 CurrentVersion 하위 키에 "_Test"라는 키를 만들려면 다음과 같이 입력하십시오.

PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros
oft\Windows\CurrentVersion

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 _Test                          {}

레지스트리 경로를 입력할 때 Windows PowerShell 드라이브 이름인 HKLM: 및 HKCU: 드라이브 이름에 콜론(:)이 없으면 Windows PowerShell은 경로에 있는 드라이브 이름을 인식하지 못합니다.

레지스트리 값이 항목이 아닌 이유

Get-ChildItem cmdlet을 사용하여 레지스트리 값에서 항목을 찾으면 실제 레지스트리 입력 항목이나 해당 값이 표시되지 않습니다.

예를 들어 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 레지스트리 키에는 대개 시스템이 시작될 때 실행되는 응용 프로그램을 나타내는 레지스트리 입력 항목이 포함되어 있습니다.

그러나 다음과 같이 Get-ChildItem을 사용하여 이 키에서 하위 항목을 찾으면 이 키의 OptionalComponents 하위 키만 표시됩니다.

PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros
oft\Windows\CurrentVersion\Run
SKC  VC Name                           Property
---  -- ----                           --------
  3   0 OptionalComponents             {}

레지스트리 입력 항목을 항목으로 취급하면 편리할 수는 있지만 레지스트리 입력 항목에 고유한 경로를 지정할 수 없습니다. 경로 표기법은 Run이라는 레지스트리 하위 키와 이 Run 하위 키에 있는 (Default) 레지스트리 입력 항목을 구별하지 않습니다. 또한 레지스트리 입력 항목 이름에는 백슬래시 문자(\)가 포함되어 있기 때문에 경로 표기법을 사용하여 Windows\CurrentVersion\Run이라는 레지스트리 입력 항목과 이 경로에 있는 하위 키를 구별할 수도 없습니다.

기존 항목 이름 바꾸기(Rename-Item)

파일이나 폴더의 이름을 바꾸려면 Rename-Item cmdlet을 사용합니다. 다음 명령은 file1.txt 파일의 이름을 fileOne.txt로 바꿉니다.

PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt

Rename-Item cmdlet은 파일이나 폴더의 이름을 바꿀 수는 있지만 항목을 이동할 수는 없습니다. 다음 명령은 파일을 New.Directory 디렉터리에서 Temp 디렉터리로 이동하려고 하기 때문에 실패합니다.

PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : Cannot rename because the target specified is not a path.
At line:1 char:12
+ Rename-Item  <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt

항목 이동(Move-Item)

파일이나 폴더를 이동하려면 Move-Item cmdlet을 사용합니다.

예를 들어 다음 명령은 New.Directory 디렉터리를 C:\temp 디렉터리에서 C: 드라이브의 루트로 이동합니다. 항목이 이동되었는지 확인하려면 Move-Item cmdlet의 PassThru 매개 변수를 포함하십시오. Passthru가 없으면 Move-Item cmdlet은 결과를 표시하지 않습니다.

PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru

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

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  12:14 PM            New.Directory

항목 복사(Copy-Item)

다른 셸의 복사 작업에 익숙한 사용자에게는 Windows PowerShell의 Copy-Item cmdlet 동작이 생소하게 느껴질 수 있습니다. 한 위치에서 다른 위치로 항목을 복사할 때 Copy-Item은 기본적으로 항목의 내용을 복사하지 않습니다.

예를 들어 C: 드라이브에서 C:\temp 디렉터리로 New.Directory 디렉터리를 복사하면 명령은 성공하지만 New.Directory 디렉터리에 들어 있는 파일은 복사되지 않습니다.

PS> Copy-Item -Path C:\New.Directory -Destination C:\temp

다음과 같이 C:\temp\New.Directory의 내용을 표시하면 아무 파일도 들어 있지 않습니다.

PS> Get-ChildItem -Path C:\temp\New.Directory
PS>

Copy-Item cmdlet이 새 위치로 내용을 복사하지 않는 이유는 다음과 같습니다.

Copy-Item cmdlet이 단지 파일과 폴더를 복사하기 위한 것이 아니라 다양한 용도로 사용하기 위해 설계되었고 사용자도 파일과 폴더를 복사할 때 컨테이너만 복사하고 그 안에 들어 있는 항목은 복사하지 않으려는 경우가 있기 때문입니다.

폴더의 내용을 모두 복사하려면 명령에 Copy-Item cmdlet의 Recurse 매개 변수를 포함하십시오. 이미 내용을 포함하지 않은 채 디렉터리를 복사한 경우 다음과 같이 빈 폴더를 덮어쓸 수 있는 Force 매개 변수를 포함하십시오.

PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18   1:53 PM            New.Directory

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

항목 삭제(Remove-Item)

파일과 폴더를 삭제하려면 Remove-Item cmdlet을 사용합니다. 중요하면서도 되돌릴 수 없는 변경 작업을 수행할 수 있는 Remove-Item과 같은 Windows PowerShell cmdlet은 종종 해당 명령을 입력하면 확인 메시지를 표시합니다. 예를 들어 New.Directory 폴더를 제거하려고 하면 이 폴더 안에 파일이 들어 있으므로 다음과 같은 명령 확인 메시지가 나타납니다.

PS> Remove-Item C:\New.Directory

Confirm
The item at C:\temp\New.Directory has children and the -recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
 sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

기본 응답이 이므로 폴더와 해당 파일을 삭제하려면 Enter 키를 누릅니다. 폴더를 제거할 때 확인 메시지가 나타나지 않도록 하려면 -Recurse 매개 변수를 사용하십시오.

PS> Remove-Item C:\temp\New.Directory -Recurse

항목 실행(Invoke-Item)

Windows PowerShell은 Invoke-Item cmdlet을 사용하여 파일 또는 폴더에 대한 기본 작업을 수행합니다. 이러한 기본 작업은 레지스트리에 등록된 기본 응용 프로그램 처리기에 의해 결정되며, Windows 탐색기에서 항목을 두 번 클릭한 것과 같습니다.

예를 들어 다음 명령을 실행할 수 있습니다.

PS> Invoke-Item C:\WINDOWS

그러면 C:\Windows 폴더를 두 번 클릭한 것처럼 C:\Windows가 표시된 탐색기 창이 열립니다.

예를 들어 Windows Vista 이전 시스템에서 다음과 같이 Boot.ini 파일을 호출할 수 있습니다.

PS> Invoke-Item C:\boot.ini

.ini 파일 유형이 메모장과 연결되어 있으면 boot.ini 파일이 메모장에서 열립니다.




목차