항목 직접 조작
파일, 폴더 또는 레지스트리 키와 같은 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 매개 변수 file
를 directory
포함합니다.
예를 들어 디렉터리에 이름이 지정된 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
파일이 메모장에서 열립니다.
PowerShell