다음을 통해 공유


항목 직접 조작

파일, 폴더 또는 레지스트리 키와 같은 PowerShell 드라이브에 표시되는 요소를 PowerShell의 항목이라고 합니다. 이러한 항목 작업을 위한 cmdlet은 이름에 명사 Item이 포함되어 있습니다.

명령의 Get-Command -Noun Item 출력은 9개의 PowerShell 항목 cmdlet이 있음을 보여 줍니다.

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 cmdlet을 사용합니다. Path 매개 변수를 항목에 대한 경로와 값이 있는 ItemType 매개 변수 filedirectory포함합니다.

예를 들어 디렉터리에 이름이 지정된 New.Directory 새 디렉터리를 만들려면 다음을 C:\Temp 입력합니다.

New-Item -Path c:\temp\New.Directory -ItemType Directory
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp

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

파일을 만들려면 ItemType 매개 변수의 값을 file로 변경합니다. 예를 들어 디렉터리에 이름이 지정된 file1.txt 파일을 만들려면 다음을 New.Directory 입력합니다.

New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory

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

동일한 기술을 사용하여 새 레지스트리 키를 만들 수 있습니다. 실제로 Windows 레지스트리의 유일한 항목 유형이 키이기 때문에 레지스트리 키를 만드는 것이 더 쉽습니다. (레지스트리 항목은 항목 속성입니다.) 예를 들어 하위 키에 명명된 _Test 키를 만들려면 다음을 CurrentVersion 입력합니다.

New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

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

레지스트리 경로를 입력할 때 PowerShell 드라이브 이름, HKLM:HKCU:에 콜론(:)을 포함해야 합니다. 콜론이 없으면 PowerShell에서는 경로의 드라이브 이름을 인식하지 못합니다.

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

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

예를 들어 레지스트리 키 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 에는 일반적으로 시스템이 시작될 때 실행되는 애플리케이션을 나타내는 여러 레지스트리 항목이 포함됩니다.

그러나 키에서 자식 항목을 찾는 데 사용할 Get-ChildItem 경우 키의 하위 키만 OptionalComponents 표시됩니다.

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

레지스트리 항목(entry)을 항목(item)으로 처리하면 편리하지만 레지스트리 항목의 경로를 고유하게 지정할 수 없습니다. Run 레지스트리 하위 키와 Run 하위 키의 (기본) 레지스트리 항목 간에 경로 표기법이 구분되지 않습니다. 또한 레지스트리 항목 이름에 백슬래시(\) 문자를 사용할 수 있으므로 레지스트리 항목(entry)이 항목(item)인 경우 경로 표기법을 사용하여 Windows\CurrentVersion\Run이라는 레지스트리 항목을 해당 경로에 있는 하위 키와 구분할 수 없습니다.

기존 항목 이름 바꾸기

파일 또는 폴더의 이름을 변경하려면 cmdlet을 Rename-Item 사용합니다. 다음 명령은 파일의 이름을 .로 file1.txt 변경합니다 fileOne.txt.

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

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

Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item  <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt

항목 이동

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

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

Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\

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

항목 복사

다른 셸에서의 복사 작업에 대해 잘 알고 있는 경우 PowerShell의 Copy-Item cmdlet 동작이 특이함을 알 수 있습니다. 항목을 한 위치에서 다른 위치로 복사할 경우 Copy-Item 은 기본적으로 해당 내용을 복사하지 않습니다.

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

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

내용을 C:\temp\New.Directory표시하면 파일이 없음을 확인할 수 있습니다.

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

cmdlet이 Copy-Item 콘텐츠를 새 위치에 복사하지 않는 이유는 무엇인가요?

Copy-Item cmdlet은 제네릭으로 설계되었으므로 파일 및 폴더를 복사하는 데 사용되지 않습니다. 또한 파일 및 폴더를 복사하는 경우에도 컨테이너 내의 항목이 아닌 컨테이너만 복사할 수 있습니다.

폴더의 모든 내용을 복사하려면 명령에 cmdlet의 Copy-Item Recurse 매개 변수를 포함합니다. 해당 내용 없이 디렉터리를 이미 복사한 경우 빈 폴더를 덮어쓸 수 있는 Force 매개 변수를 추가합니다.

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

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

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

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

항목 삭제

파일 및 폴더를 삭제하려면 cmdlet을 Remove-Item 사용합니다. 되돌릴 수 없는 중요한 변경을 수행하는 PowerShell cmdlet(예: Remove-Item)은 명령을 입력할 때 종종 확인 메시지를 표시합니다. 예를 들어 폴더를 New.Directory 제거하려고 하면 폴더에 파일이 포함되어 있으므로 명령을 확인하라는 메시지가 표시됩니다.

Remove-Item C:\temp\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"):

Yes가 기본 응답이므로 폴더와 해당 파일을 삭제하려면 Enter 키를 누릅니다. 확인하지 않고 폴더를 제거하려면 Recurse 매개 변수를 사용합니다.

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

항목 실행

PowerShell은 Invoke-Item cmdlet을 사용하여 파일 또는 폴더에 대한 기본 작업을 수행합니다. 이 기본 작업은 레지스트리의 기본 애플리케이션 처리기에 의해 결정됩니다. 효과는 파일 탐색기 항목을 두 번 클릭하는 것과 같습니다.

예를 들어 다음 명령을 실행한다고 가정합니다.

Invoke-Item C:\WINDOWS

C:\Windows 폴더를 두 번 클릭한 것처럼 C:\Windows에 있는 탐색기 창이 나타납니다.

Windows Vista 이전 시스템에서 Boot.ini 파일을 호출하는 경우:

Invoke-Item C:\boot.ini

.ini 파일 형식이 메모장과 연결되어 있는 경우 boot.ini 파일이 메모장에서 열립니다.