파일을 생성, 읽기, 업데이트 및 삭제하기 위해 PowerShell을 사용합니까? 그렇다면, 대상 파일이 존재하지 않거나 이미 존재하는 경우 오류가 발생하는 경우가 있을 것입니다. 다행히도 PowerShell에서는 파일이 존재하는지 확인하기 전에 어떤 작업을 수행할 수 있는 방법이 있습니다.
예를 들어, 코드가 파일을 바로 생성하지 않고 파일이 이미 존재하는지 테스트하는 것이 좋습니다. 아래 스크린샷에서 보여지는 대로 더 나은 코드를 작성하고 명확한 출력을 얻을 수 있습니다.

이 문서에서는 파일이 존재하는지 확인하기 위해 PowerShell을 사용하는 다양한 방법을 배우게 됩니다. 또한 각각의 방법을 사용하여 오류 처리 로직과 함께 더 나은 코드와 결과물을 얻는 방법도 배우게 됩니다.
전제 조건
서비스 데스크 호출을 줄이고 VPN 외부에서도 원격 사용자의 캐시 자격 증명을 업데이트하려면 셀프 서비스 암호 재설정 솔루션을 사용하세요. Specops uReset의 데모를 받으세요!
이 문서는 여러 예제를 통해 학습할 수 있는 안내서입니다. 예제를 따라 하기 위해 다음이 필요합니다:
- 코드 편집기. 권장하는 편집기는 Visual Studio Code와 Atom입니다. 이 편집기들은 여러 플랫폼에서 작동합니다. Windows 컴퓨터에서 작업 중이라면 Windows PowerShell ISE를 사용할 수도 있습니다.
- Windows PowerShell 5.1 (데스크톱) 또는 PowerShell 7.1 (코어). 이 문서의 명령어와 스크립트는 PowerShell 버전에 상관없이 적용됩니다. Windows, Linux 또는 macOS를 사용하더라도 PowerShell이 설치되어 있다면 사용할 수 있습니다.
관련 정보: Windows, Linux 및 macOS에 PowerShell 7 다운로드 및 설치하는 방법
파일의 존재 여부를 확인하기 위해 PowerShell 사용하기
이 문서에서는 PowerShell을 사용하여 파일이 존재하는지 확인하는 세 가지 방법을 다룹니다. 이 세 가지 방법은 사용법은 다르지만 개념과 최종 목표는 동일합니다. 이 세 가지 방법은 다음과 같습니다:
Test-Path
Cmdlet.Get-Item
및Get-ChildItem
Cmdlet.System.IO.File
클래스.
각각의 세 가지 방법에 대한 예제와 데모, 그리고 오류 처리와 함께 사용하는 방법이 제공됩니다.
Test-Path 사용하기
첫 번째 방법은 특정 경로나 파일의 존재 여부를 확인하기 위해 설계된 Test-Path
cmdlet입니다. 이 cmdlet을 사용하여 파일이 존재하는지 테스트할 때 결과는 true 또는 false입니다. 결과는 파일의 존재 여부를 나타냅니다.
아래는 Test-Path
cmdlet을 사용하여 파일을 확인하는 기본 구문입니다.
예를 들어, C:\temp\important_file.txt라는 이름의 파일이 있는지 확인해야하는 경우 아래의 코드를 사용하십시오. -PathType Leaf
부분은 cmdlet에게 디렉토리가 아닌 파일을 확인하도록 지시합니다.
PowerShell에서 위의 명령을 실행하면 파일이 존재하는 경우 결과는 True로 반환됩니다. 그렇지 않은 경우 결과는 아래 스크린샷에서 볼 수 있듯이 False입니다.

관련 정보: PowerShell Test-Path Cmdlet 사용 방법
예제: 파일이 존재하지 않을 때 파일 생성하기
이 예제는 특정 위치에 파일을 생성하는 일반적인 사용 사례입니다. 스크립트는 파일을 생성하기 전에 파일이 이미 존재하는지 확인하여 “파일이 이미 존재합니다”라는 오류를 피합니다. 파일이 존재하는 경우 스크립트는 메시지를 표시하고 더 이상 파일을 생성하지 않습니다.
아래의 코드를 복사하여 Create-NewFile.ps1이라는 파일에 저장하십시오. 파일의 출력 위치를 변경하려면 $path
변수의 값을 변경하십시오. 스크립트를 저장한 후 PowerShell에서 실행하여 테스트하십시오.
아래 스크린샷은 두 가지 다른 출력을 보여줍니다. 첫 번째는 파일이 존재하지 않을 때 스크립트를 실행한 결과입니다. 두 번째는 파일을 생성한 후에 이미 존재하는 경우입니다.

관련 기사: 기본으로 돌아가기: PowerShell 스크립트 실행 방법
Get-Item 및 Get-ChildItem 사용
Get-Item
cmdlet의 목적은 지정된 위치의 항목 가져오기입니다. 비교적으로 Get-ChildItem
cmdlet은 하나 이상의 지정된 위치에서 항목과 하위 항목 가져오기를 위한 것입니다. 이 두 가지 cmdlet의 기능은 명시적으로 파일의 존재 여부를 확인하는 것이 아닙니다.
Get-Item
또는 Get-ChildItem
을 사용하여 존재하지 않는 항목을 가져오면 어떻게 될까요? 각 누락된 파일에 대해 오류가 발생합니다. 다음 명령을 예로 들어보겠습니다.
파일 c:\temp\important_file.txt이 존재하지 않는다고 가정해 봅시다. 위의 각 명령은 오류를 반환합니다. 아래 예시에서 확인할 수 있듯이, 두 명령에 대한 오류 메시지는 동일합니다.

예시: 기존 파일 보관 및 새 파일 생성
이 예시에서 스크립트는 Get-Item
및 Test-Path
cmdlet을 사용합니다. 이 스크립트의 논리는 다음과 같습니다:
Test-Path
를 사용하여 아카이브 폴더가 있는지 테스트합니다.- 아카이브 폴더가 없으면 스크립트는
yyyy-MMM-dd_hh-mm-ss-tt
형식으로 새로운 아카이브 폴더를 생성합니다. - 그런 다음, 스크립트는 이전 파일을 아카이브 폴더로 이동시킵니다.
- 아카이브 폴더가 없으면 스크립트는
Get-Item
을 사용하여 파일이 이미 있는지 테스트합니다.- 파일이 있는 경우, 스크립트는 먼저 해당 파일을 아카이브 폴더로 이동시킵니다. 그런 다음 원래 위치에 새 파일을 생성합니다.
- 파일이 없는 경우, 스크립트는 새로운 파일을 생성합니다.
아래의 코드를 복사하여 Create-NewFileAfterArchive.ps1로 저장하십시오. 스크립트를 저장한 후 PowerShell에서 실행하여 결과를 확인하십시오.
팁:
-ErrorAction Ignore
매개변수는 오류를 억제합니다(콘솔에 표시되지 않음) 및 오류를$error
자동 변수에 기록하지 않습니다.
아래 스크린샷에서 첫 번째 스크립트 실행은 c:\temp\important_file.txt 파일을 생성했습니다. 이후의 스크립트 실행은 매번 새 아카이브 폴더를 생성하고, 기존 파일을 아카이브 폴더로 이동한 후 c:\temp\important_file.txt에 새 파일을 생성합니다.

[System.IO.File]::Exists() .NET 메소드 사용하기
이 문서에서 학습할 마지막 방법은 System.IO.File .NET 클래스의 Exists()
메소드입니다. PowerShell의 장점 중 하나는 .NET 클래스와 메소드를 가져와 사용할 수 있는 능력입니다.
예를 들어, PowerShell에서 Exists()
메소드를 사용하여 파일이 존재하는지 확인하려면 아래 코드를 사용합니다.
위의 방법은 부울 결과를 생성합니다 – true 또는 false. 결과가 true로 반환되면 대상 파일이 존재하는 것을 의미합니다. 그렇지 않으면 대상 파일이 존재하지 않을 때 결과는 false로 반환됩니다.
아래 예시 코드에서는 파일 c:\temp\important_file.txt의 존재 여부를 확인합니다.
아래 결과에서 볼 수 있듯이, 결과는 true를 반환하여 파일이 존재함을 확인합니다.

이 .NET 방법을 사용하면 다음과 같은 삼항 연산자를 사용할 수도 있습니다. 기본적인 true 또는 false 결과를 표시하는 대신, 더 짧은 구현으로 결과 메시지를 사용자 정의할 수 있습니다. 그러나 이 예시에서의 삼항 연산자는 PowerShell 7+에서만 적용됩니다.
예시: 파일이 존재하는 경우 파일 내용 업데이트
이 예시 스크립트는 텍스트 파일에 새로운 GUID 값을 추가하여 파일을 업데이트합니다. 그러나 파일이 존재하는 경우에만 내용 업데이트가 발생합니다. 그렇지 않으면 스크립트는 메시지를 표시하고 아무 작업도 수행하지 않습니다.
아래 스크립트를 복사하고 Update-FileContents.ps1로 저장하십시오. 필요한 경우 $file
변수의 파일 경로 값을 변경한 다음 PowerShell에서 스크립트를 실행하여 테스트하십시오.
아래 스크린샷에서 볼 수 있듯이 스크립트가 실행될 때마다 파일이 업데이트되었습니다. 업데이트가 발생한 이유는 [System.IO.File]::Exists()
메서드가 파일 c:\temp\important_file.txt가 존재함을 확인했기 때문입니다.
최종적으로 명령어 gc c:\temp\important_file.txt
를 사용하여 파일의 내용을 읽으면 스크립트가 GUID 값을 사용하여 파일을 업데이트했음을 확인할 수 있습니다.

관련 정보: PowerShell 데이터 유형 가속기를 사용하여 코딩 속도 향상하기
결론
서비스 데스크 호출을 줄이고 VPN 없이 원격 사용자의 캐시 자격 증명을 업데이트하는 자체 서비스 암호 재설정 솔루션입니다. Specops uReset의 데모를 받으세요!
이 글에서는 파일의 존재 여부를 확인하기 위해 PowerShell을 사용하는 여러 가지 방법을 알아보았습니다. 파일과 관련된 수정 작업을 수행하기 전에 파일의 존재 여부를 확인하는 것이 좋은 관행입니다.
당신은 Get-Item
, Get-ChildItem
, 그리고 Test-Path
cmdlet을 사용하는 방법에 대해 배웠습니다. 또한 [System.IO.File]::Exists() .NET
메소드에 대해서도 알게 되었습니다. 이 예제들은 기술을 사용하는 방법과 에러 처리 로직과의 결합을 보여주었습니다.
더 이상 그 에러 메시지들을 견딜 필요가 없습니다. 파일 관련 작업을 수행하기 전에 파일이 존재하는지 확인하는 코드를 추가하여 그 에러들을 극복하세요. 여기서 배운 기술들은 기본에 대해서만 다루었으며, 이제 당신은 그것들을 개선할 차례입니다.
Source:
https://adamtheautomator.com/powershell-check-if-file-exists/