Share via


항목 직접 조작

파일, 폴더 또는 레지스트리 키와 같은 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 파일이 메모장에서 열립니다.