Windows 10에서 컴퓨터/시스템 속성을 여는 6가지 방법
Windows 10에서 컴퓨터 속성(또는 시스템 속성)을 열려면 다음 6가지 방법 중 하나를 사용할 수 있습니다.
PC가 일상적인 작업을 대신 처리해 준다면 어떨까요? Windows PowerShell을 사용하면 가능합니다. PowerShell을 사용하여 아무도 반복하고 싶어 하지 않는 반복적이고 일상적인 작업을 자동화하는 방법을 소개합니다.
목차
Microsoft PowerShell은 관리자가 컴퓨터와 네트워크의 다양한 작업을 자동화하는 데 사용할 수 있는 강력한 도구인 명령줄 유틸리티이자 스크립팅 언어입니다. PowerShell은 명령 프롬프트의 구성 요소를 포함하며 .NET 프레임워크를 기반으로 합니다. WebTech360에 대해 알고 있다면 PowerShell이 IT 관리자가 대규모 네트워크를 관리하는 데 가장 적합한 도구라는 것을 알고 계실 것입니다.
PowerShell 사용법을 배우면 지루한 일상 업무가 훨씬 간소화됩니다. 또한 각 서버를 개별적으로 구성하지 않고도 네트워크를 통해 시스템 전체의 변경 사항을 적용할 수 있습니다. PowerShell은 하이브리드 클라우드 환경 운영에 필수적인 요소가 되고 있습니다 .
PowerShell은 작업 효율을 높이고 네트워크를 효율적으로 운영하는 데 도움이 되는 다양한 기능을 제공합니다. 가장 기본적인 용도로는 시스템 일일 업데이트 예약, 현재 프로세스 보고서 생성, 정기 서비스 등이 있습니다. 이러한 작업 중 상당수는 GUI를 통해 수행할 수 있지만, PowerShell의 핵심은 더 빠르게 작업을 완료하는 것입니다.
설정하는 데 몇 분 정도 걸리는 일상적인 유지 관리 작업이 있다면, 동일한 기능을 PowerShell이라는 단일 명령으로 스크립팅할 수 있습니다. 그러면 다음에 해당 스크립트를 열 때 백그라운드에서 실행됩니다. PowerShell 스크립팅 로직을 숙달하고, 객체와 var(변수)의 작동 방식을 이해하고, 이를 네트워크 전반에 지능적으로 배포하면 왜 더 일찍 PowerShell을 사용하지 않았는지 의아해할 것입니다.
이 튜토리얼에서는 PowerShell의 기본 사항을 다루며, 특히 Windows 명령 프롬프트에 익숙한 IT 초보자에게 도움이 될 것입니다. 기본 도구와 명령 사용 방법, 파일 및 폴더 작업, 개체 이해, 변수 사용 방법, 원격 서버 관리 방법 등을 다룹니다.
Windows NT 출시 이후 CMD.EXE는 Windows용 명령줄 유틸리티가 되었습니다. CMD.EXE는 이전 버전인 DOS(COMMAN.COM)의 일부 요소를 계승했지만, 여전히 Windows 명령 파일(.CMD 및 .BAT)을 사용하는 다소 "원시적인" 스크립팅 언어에 기반을 두고 있었습니다. Windows Scripting Host와 VBScript, JScript 언어가 추가되면서 이 유틸리티의 스크립팅 기능이 크게 향상되었습니다.
이러한 기술은 고급 명령줄 유틸리티와 스크립팅 환경이 상당히 균형 있게 결합된 형태입니다. 진짜 문제는 이 기술로 얼마나 많은 CMD.EXE, .CMD, 그리고 Windows 스크립팅 호스트 파일을 조작할 수 있느냐가 아닙니다. 가장 큰 불만이자 우려는 겉보기에 간단해 보이는 작업들을 처리하는 것입니다.
명령줄 및 스크립팅 도구의 "프레임워크"를 사용하는 어느 정도 포괄적인 스크립트는 배치 명령, Windows 스크립팅 호스트, 그리고 독립 실행형 실행 파일의 조합을 필요로 합니다. 각 스크립트는 실행 및 요청, 구문 분석, 그리고 데이터 반환에 대해 서로 다른 규칙을 사용합니다.
CMD.EXE의 변수 지원 부족, 일관되지 않은 인터페이스, Windows 설정 접근 제한, 그리고 또 다른 약점은 명령줄 스크립팅을 구현하고 사용하기 어렵게 만듭니다. 이 '또 다른 약점'이 무엇일까요? 바로 텍스트입니다. 이러한 기술에서는 모든 것이 텍스트입니다. 명령이나 스크립트의 출력은 텍스트이며, 다음 명령의 입력으로 사용되도록 구문 분석하고 형식을 변경해야 합니다. 이것이 PowerShell이 모든 기존 셸에서 채택하는 기본적인 시작점입니다.
이 섹션에서 소개하는 세 가지 개념은 PowerShell의 기반을 이루는 핵심 개념을 이해하는 데 매우 기본적인 내용입니다. PowerShell 명령을 사용하면서 고급 개념을 더 깊이 있게 배우고 익히는 데 더 많은 시간을 투자해야 합니다.
PowerShell은 Windows 10, Windows 7, Windows Server 2008 R2 및 최신 Windows 버전에 기본적으로 설치됩니다. 최신 버전의 PowerShell은 새로운 기능과 "cmdlet"(Microsoft에서 PowerShell 명령을 지칭하는 용어로, "commandlet"이라고 발음)을 추가하며, 해당 버전의 Windows Management Framework(WMF)와 함께 설치됩니다.
현재 권장되는 최신 버전은 WMF 5.1입니다. 경우에 따라 일부 새로운 기능은 WMF 버전 외에도 운영 체제에 따라 달라집니다. 예를 들어 Windows 8과 Windows Server 2012는 특정 TCP/IP 포트에 대한 연결을 테스트할 수 있는 Test-NetConnection cmdlet을 지원 하지만, Windows 7에서는 최신 버전의 WMF를 실행하더라도 이 cmdlet을 사용할 수 없습니다.
대부분의 Windows 시스템에서는 PowerShell 콘솔과 PowerShell ISE(통합 스크립팅 환경)라는 두 가지 PowerShell 환경을 사용할 수 있습니다. PowerShell 콘솔은 기존 명령줄처럼 보이지만, PowerShell의 모든 기능을 제공합니다. 변수 이름, 루프, 명령 자동 완성, 파이핑 기능을 모두 PowerShell 콘솔에서 사용할 수 있습니다.
스크립팅과 같은 고급 기능을 위해 PowerShell ISE는 명령 자동 완성, 코드 강조 표시, Microsoft Intellisense 코드 완성 기능을 제공하여 PowerShell 코드를 작성하고 테스트할 수 있도록 지원합니다. 또한 PowerShell ISE에서는 탭 탐색 기능을 사용하여 여러 PowerShell 스크립트를 동시에 작업할 수 있습니다.
PowerShell 명령의 기반은 cmdlet입니다. Microsoft는 PowerShell에서 cmdlet을 만들 때 여러 가지 설계 전략을 적용했습니다.
첫 번째는 cmdlet 이름을 쉽게 유추하거나, 최소한 더 쉽게 찾을 수 있도록 하는 기능입니다. PowerShell 명령이나 cmdlet은 표준화된 구문을 통해 사용이 더욱 편리하도록 설계되어 명령줄 인터페이스에서 스크립트를 더 쉽게 작성할 수 있습니다.
cmdlet은 Get-Service, Stop-Service 또는 Import-Csv와 같이 동사-명사 형식을 사용합니다. cmdlet 이름의 동사 부분은 명사에 대해 수행되는 작업을 나타냅니다. 일반적으로 정보를 검색하는 데 사용되는 cmdlet에는 Get-Process 또는 Get-Content 와 같이 이름에 Get 동사가 포함됩니다. 무언가를 수정하는 데 사용되는 명령은 일반적으로 Set 동사로 시작하고 , 무언가에 새 엔터티를 추가하는 데 사용되는 명령은 일반적으로 Add 또는 New 동사로 시작합니다 .
둘째, PowerShell에서 일반적으로 사용되는 매개변수에도 표준화된 이름이 지정됩니다. 예를 들어, -ComputerName 매개변수를 사용하면 하나 이상의 원격 컴퓨터에서 cmdlet을 실행할 수 있습니다. -Credential은 사용자 자격 증명이 포함된 인증 개체를 제공하여 특정 사용자로 명령을 실행하는 데 사용됩니다.
cmdlet과 매개변수 모두에 별칭을 사용하면 키 입력을 줄이고 명령의 전체 길이를 줄일 수 있습니다(여러 명령을 연결할 때 유용합니다). 이러한 별칭이 항상 표준 명명 규칙을 따르는 것은 아니지만, 여전히 기존 명령줄 유틸리티를 반영합니다.
PowerShell에서 DIR, CD, DEL, CLS와 같은 별칭은 각각 Get-ChildItem, Set-Location, Remove-Item, Clear-Host cmdlet에 해당합니다. 매개변수 별칭은 두 가지 방식으로 작동할 수 있습니다. cmdlet에서 제공하는 미리 정의된 별칭을 사용하거나, cmdlet에서 지원하는 매개변수 간에 고유한 일치 항목을 생성할 만큼 충분한 문자를 입력하여 별칭을 지정할 수 있습니다.
대부분의 시스템 관리자는 작업 과정에서 파일과 폴더를 조작해야 합니다. 폴더를 서버의 다른 위치로 이동하거나, 로그 파일을 보관하거나, 대용량 파일을 검색하는 등의 작업이 여기에 포함됩니다. 여러 파일에 동일한 작업이 반복되는 경우, PowerShell을 사용하여 자동화하는 것이 시간을 절약하는 효과적인 솔루션이 될 수 있습니다.
파일과 폴더를 찾기 위해, 옛날 컴퓨팅 시대에 관리자가 처음 익혔던 명령줄 도구 중 하나는 dir 명령이었습니다. dir 명령은 지정된 디렉터리에 있는 파일과 폴더를 나열합니다.
PowerShell에는 Get-ChildItem Cmdlet 형태의 유사한 명령이 있습니다 . Get-ChildItem을 사용하면 디렉터리의 파일 목록을 빠르게 작성할 수 있으며, 파이프 명령을 사용하여 파일을 조작하거나 출력을 변수에 할당할 수 있습니다.
Get-ChildItem은 파이프라인을 통하거나, -Path 매개변수를 사용하거나 , cmdlet 이름 바로 뒤에 경로를 입력하여 간단히 사용할 수 있습니다. Get-ChildItem에서 반환되는 응답을 수정하려면 cmdlet에서 제공하는 몇 가지 매개변수를 고려해야 합니다.
-Filter 매개변수 는 파일을 검색할 수 있는 한 가지 방법입니다. 기본적으로 Get-ChildItem은 대상 디렉터리의 직계 자식 디렉터리만 반환합니다. 이 기능은 현재 디렉터리에 포함된 디렉터리를 재귀적으로 검색하는 -Recurse 매개변수를 사용하여 확장할 수 있습니다.
PowerShell 4.0에서 Get-ChildItem은 –File 또는 –Directory 스위치를 사용하여 결과를 파일이나 디렉터리로 제한하는 기능을 추가했습니다 . 이전 버전의 PowerShell에서는 결과를 Where-Object로 전달하고 PSIsContainer 속성을 필터링하여 결과를 결정해야 했습니다. C:Users 디렉터리에 포함된 디렉터리를 반환하는 데 두 가지 방법을 모두 사용한 예는 다음과 같습니다.
Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}
숨겨진 파일이나 시스템 파일을 감지하려면 -Force 옵션 을 사용해야 합니다 . PowerShell 4.0 이상에서는 Get-ChildItem 옵션을 사용하여 -Hidden, -ReadOnly , –System 옵션을 각각 사용하여 숨겨진 파일, 읽기 전용 파일 또는 시스템 파일만 반환할 수도 있습니다. 이전 버전에서는 Where-Object를 사용하여 Mode 속성을 필터링하여 유사한 기능을 구현할 수 있었습니다.
Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}
파일이 존재하는지 확인하세요
일반적으로 파일 작업을 할 때 필요한 것은 파일이 존재하는지 또는 디렉터리 경로가 유효한지 여부뿐입니다. PowerShell은 이를 위한 cmdlet인 Test-Path를 제공하며, 이 cmdlet은 true 또는 false 값을 반환합니다.
Test-Path는 특정 파일을 복사하거나 삭제하기 전에 예방 조치로 사용됩니다.
파일 복사, 이동 및 삭제
Copy-Item: -Path 매개변수로 지정된 위치에서 하나 이상의 파일이나 디렉토리를 -Destination 옵션으로 지정된 위치로 복사합니다.
항목 이동: 파일이나 폴더를 이동합니다.
디렉터리 구조를 복사하거나 이동할 때 -Recurse 옵션을 사용하면 cmdlet이 디렉터리와 그 내용에 대한 작업을 수행하도록 할 수 있습니다. 복사 작업으로 읽기 전용 파일을 덮어쓰는 경우와 같이 -Force 옵션 도 필요한 경우가 있습니다.
Remove-Item: 파일, 폴더를 삭제합니다.
읽기 전용 파일을 발견하면 -Force 스위치를 사용해야 하고, 디렉토리와 그 내용을 삭제할 때는 -Recurse 스위치를 사용해야 합니다.
PowerShell -WhatIf 및 -Confirm 사용
심각한 대량 삭제를 수행하기 전에 -WhatIf 옵션을 사용하세요 . -WhatIf 옵션을 사용하면 스크립트나 명령을 실행했을 때 어떤 결과가 발생하는지, 그리고 중요한 비즈니스 데이터를 삭제했을 때 발생할 수 있는 부정적인 영향이 있는지 확인할 수 있습니다. -WhatIf 옵션은 파일 작업에만 국한되지 않고 PowerShell에서도 널리 사용됩니다.
수동으로 실행하거나, 더 심각한 경우 수동으로 실행되는 종속 명령이 있는 스크립트의 경우 -Confirm 옵션을 사용하는 것이 좋습니다 . 이렇게 하면 작업이 실제로 실행되기 전에 사용자 상호 작용을 요구할 수 있습니다.
PowerShell 스크립트 = 스테로이드를 첨가한 배치 파일
PowerShell 자체는 .NET 언어로 작성되었으며 .NET Framework를 기반으로 합니다. 따라서 PowerShell은 객체 지향 셸 및 스크립팅 언어로 설계되었습니다. PowerShell의 모든 항목은 .NET Framework의 모든 기능을 갖춘 객체로 처리됩니다. 명령은 해당 객체 유형의 속성과 메서드를 사용하여 사용할 수 있는 객체 컬렉션을 제공합니다. 한 명령의 출력을 다른 명령으로 파이프할 때 PowerShell은 첫 번째 명령의 텍스트 출력뿐만 아니라 실제로 객체를 전달합니다. 이를 통해 다음 명령은 파이프라인에 있는 해당 객체의 모든 속성과 메서드에 대한 전체 액세스를 갖게 됩니다.
모든 것을 객체로 취급하고 명령 간에 객체를 허용할 수 있다는 것은 명령줄 유틸리티 이론에 있어 큰 변화입니다. 하지만 PowerShell은 여전히 기존 셸처럼 작동합니다. 명령, 스크립트, 실행 파일을 명령줄에서 입력하고 실행할 수 있으며, 결과는 텍스트로 표시됩니다. Windows .CMD 및 .BAT 파일, VBScript, JScript, 그리고 CMD.EXE 내에서 실행되는 실행 파일은 모두 PowerShell에서 실행됩니다. 하지만 이러한 파일들은 객체 지향적이지 않기 때문에 PowerShell에서 생성되고 사용되는 객체에 대한 완전한 접근 권한을 가지고 있지 않습니다. 이러한 레거시 스크립트와 실행 파일은 여전히 모든 것을 텍스트로 취급하지만, PowerShell을 여러 다른 기술과 결합할 수 있습니다. 특히 한 번에 모두 변환할 수 없는 기존 스크립트 모음과 함께 PowerShell을 사용하려는 경우 이는 매우 중요합니다.
Cmdlet은 매개변수를 받아 동작을 변경할 수 있습니다. Cmdlet이나 함수를 실행할 때 매개변수 값을 제공하여 각 PowerShell 명령이 언제, 어디서, 어떻게 실행되는지 지정할 수 있습니다.
예를 들어, Get-Process는 운영 체제에서 실행 중인 모든 프로세스를 검색하여 나열합니다.
하지만 특정 프로세스만 가져오고 싶다면 어떻게 해야 할까요? 매개변수를 사용하면 됩니다. 예를 들어, 모든 Slack 프로세스를 가져오려면 Get-Process Cmdlet과 함께 Name 매개변수를 사용하면 됩니다.
Get-Process -Name Slack
그러면 "slack"이라는 이름의 프로세스만 볼 수 있습니다.
팁 : 일부 매개변수는 "위치 기반"이므로 이름이 선택 사항입니다. 이 경우 Get-Process -Name Slack 과 Get-Process Slack은 모두 동일한 작업을 수행합니다.
각 Cmdlet은 서로 다른 유형의 매개변수를 허용합니다. Get-Help 명령을 사용하여 SYNTAX 섹션에서 Cmdlet의 허용 매개변수를 확인하세요.
Get-Help Get-Process
주어진 Cmdlet을 실행할 수 있는 모든 가능한 방법 목록이 표시됩니다.
이 경우 Get-Process Cmdlet은 Name, Id, ComputerName, Module, FileVersionInfo 및 기타 일반적인 매개변수와 같은 매개변수를 허용합니다. 여기서 기호의 의미는 다음과 같습니다.
상징 |
이름 |
의미 |
---|---|---|
북 |
매개변수가 입력을 허용하지 않습니다 |
|
- |
하이픈 |
매개변수 이름을 지정하세요 |
<> |
중괄호 |
텍스트 자리 표시자 |
[] |
괄호 |
매개변수는 하나 이상의 값을 받을 수 있습니다. |
{} |
중괄호 |
매개변수는 일련의 값을 허용합니다. |
매개변수는 문자열, 정수, 부울 또는 DateTime과 같이 필요한 데이터 유형을 나타내는 값 집합을 허용합니다. 예를 들어 다음 명령은 다음과 같습니다.
Get-Process [[-Name] ]
... Name 매개변수는 하나 이상의 문자열 값을 허용하는 반면, 이 명령은 다음과 같습니다.
Get-Process -Id
...는 Id 매개변수가 하나 이상의 정수 값을 허용한다는 것을 의미합니다.
이전 Get-Process 예제에서는 Name 매개변수를 사용하여 결과 범위를 좁혔습니다. 하지만 더 구체적인 프로세스로 범위를 좁히려면 ID 매개변수를 사용할 수 있습니다 . 이 매개변수는 구문에 명시된 대로 정수를 필요로 합니다.
Get-Process -Id 3016
그러면 목록에 하나의 프로세스만 표시됩니다.
PowerShell은 모든 데이터를 객체로 처리합니다. 스크립트를 작성하기 위해 이러한 객체는 파이프 기호(|)로 연결된 일련의 Cmdlet이나 함수를 통해 실행됩니다. 효율적인 스크립트를 위해서는 적절한 Cmdlet을 선택하고 파이프라인을 사용하여 논리적인 순서대로 연결하는 것이 중요합니다.
디렉터리에서 가장 많은 공간을 차지하는 5개의 파일을 정렬하여 표시하는 스크립트를 만든다고 가정해 보겠습니다. 파일 정렬 스크립트를 작성하는 더 강력한 방법들이 있지만, 다음과 같은 간단한 방법이 이해하기 쉽습니다.
PowerShell에서 이 작업을 수행하려면 다음과 같은 파이프라인을 사용하세요.
Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
| Select-Object -First 5 | Format-Table Name, Length -AutoSize
이제 작동하는 파이프라인이 있으므로 이를 PS1 스크립트 파일로 저장하면 사용할 때마다 가져올 필요가 없습니다.
PS1 파일을 만드는 가장 간단한 방법은 스크립트를 메모장에 붙여넣고 파일을 .ps1 확장자로 저장하는 것입니다.
PS1 파일을 생성하면 ./ScriptName.ps1을 실행하여 PowerShell에서 사용할 수 있습니다 .
팁 : 권한 오류가 발생하는 경우 가장 빠른 해결 방법은 스크립트를 실행할 때 관리자 권한으로 PowerShell을 실행하는 것입니다.
축하합니다! 이제 PowerShell PS1 스크립트를 만들 수 있습니다.
새로운 기술의 놀라운 장점에 대해 읽고 이해하는 것과 실제로 사용하는 것은 전혀 다른 문제입니다! 이 글의 나머지 부분에서는 PowerShell 스크립트를 개발하여 그 기능과 사용 방법을 보여드리겠습니다.
DIR은 CMD.EXE에서 가장 많이 사용되는 명령어 중 하나입니다 . 이 명령어는 상위 디렉터리에 포함된 모든 파일과 하위 디렉터리를 표시합니다(그림 1 참조). 각 개체의 이름과 함께 마지막 업데이트 날짜 및 시간, 각 파일의 크기 정보가 제공됩니다. 또한 DIR은 디렉터리에 있는 모든 파일의 총 크기뿐만 아니라 파일 및 하위 디렉터리의 총 개수도 표시합니다.
그림 1
PowerShell에서 DIR 명령을 실행해도 그림 2와 같은 디렉터리 목록이 생성되지만, 방식이 약간 다릅니다. PowerShell에는 DIR 명령이 없지만, 동일한 기능을 수행하는 Get-ChildItem 명령이 있습니다. PowerShell에서 DIR은 Get-ChildItem의 별칭입니다. 이 글에서는 별칭에 대해 다루지 않겠습니다. PowerShell에서 DIR은 Get-ChildItem의 약자라고 생각하면 됩니다.
PowerShell의 DIR은 위에서 언급한 것과 거의 동일한 정보를 제공합니다. 파일 및 폴더 목록, 마지막 수정 날짜 및 시간, 각 파일의 크기 등이 포함됩니다. 하지만 CMD.EXE의 DIR이 제공하는 요약 정보(폴더에 있는 모든 파일의 총 크기, 총 파일 수, 그리고 총 하위 폴더 수)는 제공되지 않습니다.
그림 2
예시 시나리오에서는 CMD.EXE DIR 명령을 시뮬레이션하는 PowerShell 스크립트를 만들어야 합니다. 아래에서 스크립트의 가장 중요한 부분을 설명하겠습니다.
DIR.PS1: 헤더
PowerShell 스크립트는 .PS1 확장자를 가진 일반 텍스트 파일에 PowerShell 명령 으로 구성됩니다 . DIR 대신 DIR.PS1이라는 텍스트 파일을 사용합니다.
스크립트를 실행하려면 PowerShell 화면에 다음 명령을 입력하세요.
.DIR.PS1 X:Folder
여기서 X는 드라이브 파티션 문자(예: C, D, E)이고 폴더는 폴더 이름입니다.
드라이브 파티션에 대한 정보를 알고 싶다면 WMI(Windows Management Instrumentation)를 사용해야 합니다. WMI에 대한 자세한 내용은 이 문서의 범위를 벗어나므로 여기서는 다루지 않겠습니다. 하지만 아래 PowerShell 코드는 WMI를 사용하지 않고도 충분히 이해할 수 있습니다. Get-WmiObject 명령과 함께 사용할 "$filter" 변수를 만들 수 있습니다. 이 필터는 Get-WmiObject 명령에 특정 드라이브에 대한 정보만 필요하다는 것을 알려줍니다. Get-WmiObject 명령의 결과는 $volInfo라는 변수에 저장됩니다. PowerShell에서는 모든 것이 객체라는 점을 기억하세요. $volInfo는 이제 Get-WmiObject가 반환하는 객체입니다.
$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter
이제 해당 개체와 관련된 모든 개체와 메서드에 액세스할 수 있습니다. 볼륨 일련 번호는 VolumeSerialNumber 속성을 통해 액세스할 수 있습니다. 반환된 숫자는 8자리 문자열입니다. 하지만 하이픈으로 구분된 네 자리 숫자로 형식을 지정하는 경우가 많습니다. 다음 줄과 유사하게 지정할 수 있습니다. 첫 번째 줄 끝에 있는 하이픈은 PowerShell에서 줄 연속 문자입니다. 기본적으로 PowerShell에 줄이 끊어지지 않고 다음 줄이 포함된다는 것을 알려줍니다. 코드 작성 시 줄 바꿈은 필수는 아니지만, 코드 폭을 줄이고 가독성을 높이려면 줄 바꿈을 사용해야 합니다.
$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)
이제 $volInfo 객체가 생성되었으므로 DIR 헤더 정보를 화면에 쓸 수 있습니다. 드라이브 이름이 없는 경우, 화면에 표시되는 텍스트는 드라이브 이름이 있는 경우와 약간 다릅니다. 간단한 If-Else 문을 사용하여 VolumeName 속성이 빈 문자열인지 확인합니다. Write-Host 문을 사용하여 각 텍스트 줄을 화면에 씁니다.
If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")
Write-Host 명령의 시작과 끝에 있는 "`n" 문자는 텍스트 앞뒤에 새 줄을 삽입하는 데 사용됩니다. Write-Host 명령은 각 줄의 끝에 새 줄을 추가합니다. 따라서 "`n" 문자는 텍스트 앞뒤에 빈 줄을 만드는 효과를 냅니다.
If 명령에서 "-eq"를 보셨나요? 이는 동등 비교 연산자입니다. 아래 표는 모든 비교 연산자를 보여줍니다.
-eq, -ieq | 비교하다 |
-ne, -ine | 비교는 동일하지 않습니다 |
-gt, -igt | 보다 큰 것을 비교하다 |
-게, -이게 | 보다 크거나 같음을 비교하다 |
-lt, -ilt | 보다 작은 것을 비교하세요 |
-le, -ile | 이하와 비교하다 |
비교 연산자 앞에 -i 문자를 붙이면 해당 연산자가 대소문자를 구분하지 않음을 나타냅니다.
그림 3: 현재 가지고 있는 스크립트의 출력 데이터
DIR.PS1: 파일/폴더 목록
이제 이 폴더의 내용과 속성을 표시할 준비가 되었습니다. 먼저 PowerShell Get-ChildItem 명령을 호출하여 파일 모음을 가져와 스크립트에 매개변수로 전달합니다. Get-ChildItem 명령은 파일 및 폴더 개체 모음을 가져오는데, 이름뿐만 아니라 이러한 개체를 Sort-Object 명령으로 직접 파이프하여 정렬합니다. 기본적으로 Sort-Object 명령은 Name 속성을 기준으로 개체를 정렬합니다. 따라서 다른 매개변수를 지정할 필요가 없습니다. 정렬된 개체 모음은 $items라는 변수에 저장됩니다.
$items = Get-ChildItem $args[0] | Sort-Object
파일 및 폴더 객체 모음을 만든 후에는 해당 객체들을 순회하며 적절한 속성을 표시해야 합니다. 이 작업을 위한 명령은 ForEach입니다. 각 파일 또는 폴더에 대해 표시되는 속성은 마지막으로 수정된 날짜와 시간, 파일 이름, 길이 또는 크기입니다. 괄호 안의 이상하게 생긴 문자열은 .NET 문자열 형식 코드입니다. 이 코드들은 필드를 왼쪽/오른쪽 정렬하고 날짜, 시간 및 숫자의 형식을 지정하는 데 사용됩니다. 이러한 문자열 형식 코드는 이 스크립트의 본질에 필수적인 요소가 아니므로 이해하는 것은 그다지 중요하지 않습니다.
If 문은 객체가 디렉터리인지 아닌지를 판별하는 곳입니다. Mode 속성의 첫 글자가 "d"이면 객체는 디렉터리입니다. 디렉터리 코드는 파일 코드와 다른 경우가 많으므로 다시 한 번 확인해야 합니다.
If 문 안에 있는 $totalDirs++ 줄을 주목하세요. 이 줄은 디렉터리 개수를 추적하는 카운터입니다. 마찬가지로, 모든 파일의 총 크기를 추적하는 데 사용되는 $totalFiles 변수도 있습니다. 이 값들은 실행 중에 항상 계산되지만, 파일 목록 작성 프로세스가 완료된 후에만 표시됩니다.
ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}
그림 4: 업데이트된 스크립트의 출력 데이터를 표시합니다.
DIR.PS1: 바닥글
이제 남은 작업은 총 파일 수, 디렉터리 수, 모든 파일의 총 크기, 그리고 이 드라이브 파티션의 여유 공간을 화면에 표시하는 것입니다. 이를 위해서는 이전 섹션에서 생성한 카운터 변수($totalFiles, $totalDirs, $totalSize)를 사용해야 합니다. 스크립트 시작 부분에서 생성한 $volInfo 변수에서 여유 공간을 확인할 수 있습니다.
Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")
그림 5: 스크립트의 전체 출력 데이터를 표시합니다.
예측 및 개선이 가능합니다.
작성한 스크립트는 CMD.EXE DIR 명령과 거의 동일한 출력을 생성하지만, 알아두어야 할 몇 가지 주의 사항과 개선할 수 있는 부분이 있습니다.
PowerShell을 사용하면 일관성을 위해 파일 이름을 일괄 변경하거나 애플리케이션을 자동으로 실행하는 등 거의 모든 작업을 자동화할 수 있습니다. 몇 가지 간단한 Windows PowerShell 스크립트를 작성하여 작동 방식을 살펴보겠습니다.
참고 : 실행 정책과 관련된 스크립트를 실행할 때 오류가 발생하는 경우 "Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass"를 실행하여 스크립트가 일시적으로 실행되도록 허용해야 할 수 있습니다.
폴더의 파일 이름 일괄 변경
PowerShell을 사용하여 PC에서 파일을 복사, 이동, 삭제할 수 있습니다. 특정 파일 형식의 파일 이름을 한꺼번에 바꿀 수도 있습니다. 예를 들어, 여러 텍스트 파일의 파일 이름에서 접두사 "oldco"를 "newco"로 바꿔서 이름을 바꾸는 방법은 다음과 같습니다.
Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}
위 스크립트에서 ".txt"는 파일 확장자 필터입니다. 이 필터를 수정하여 .jpg, .docx 등으로 설정하여 다양한 유형의 파일을 검색할 수 있습니다.
자동 실행 애플리케이션
매일 동일한 애플리케이션 세트를 여는 경우 PowerShell 스크립트를 작성하여 한 번의 클릭으로 해당 애플리케이션을 실행할 수 있습니다.
#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"
스크립트를 메모장 파일에 붙여넣고 LaunchFavoriteApps.ps1이라는 이름으로 저장하세요. 그런 다음 파일을 두 번 클릭하면 스크립트에 나열된 모든 앱이 실행됩니다.
중요한 파일을 백업 위치로 복사하세요
다음 스크립트를 사용하여 중요한 파일을 백업 위치에 주기적으로 백업할 수 있습니다. 필요에 따라 원본 경로와 대상 경로를 변경하세요.
#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse
매일 다양한 유형의 파일이 다운로드되기 때문에 다운로드 폴더는 온갖 종류의 파일이 여기저기 흩어져 빠르게 어지러워질 수 있습니다. 이 문제를 해결하려면 매일 다운로드한 파일을 파일 유형별로 폴더로 분류하는 PowerShell 스크립트를 작성하면 됩니다.
새 메모장 파일을 열고 다음 스크립트를 붙여넣으세요. 스크립트의 소스 폴더 경로를 다운로드 폴더 경로와 일치하도록 변경하세요.
# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"
파일을 저장하려면 파일 > 다른 이름으로 저장을 클릭하고 파일 이름으로 OrganizeDownloadsFolder.ps1을 입력합니다 . 그런 다음 파일 형식을 클릭하고 모든 파일을 선택합니다 . OrganizeDownloadsFolder.ps1 파일을 두 번 클릭하여 스크립트를 실행합니다.
물론, 스크립트를 작성하는 것은 자동화 프로세스의 한 부분입니다. 두 번째 부분은 스크립트가 자동으로 실행되어 작업을 수행할 수 있도록 하는 것입니다. 이를 위해 매일 또는 필요에 따라 스크립트를 실행하는 예약 작업을 생성할 수 있습니다.
PowerShell을 열고 다음 스크립트를 복사하여 붙여넣은 후 Enter 키를 누르세요. 'J:\OrganizeDownloadsFolder.ps1'을 OrganizeDownloadsFolder.ps1 스크립트 의 전체 파일 경로로 바꿔야 합니다 .
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"
완료되면 Enter 키를 누르세요 . 스크립트는 작업 스케줄러에 예약된 작업을 생성하여 매일 오후 5시에 파일 정리 스크립트를 실행합니다. 다른 시간을 원하시면 위 스크립트에서 수정할 수 있습니다.
또한 PowerShell을 사용하면 기본 드라이브의 여유 공간이 부족할 때 알림을 보내는 공간 모니터링 스크립트, PDF 문서 일괄 처리에 암호 보호, 이미지 폴더에서 라이브 배경 화면 적용 등 일상적인 작업을 자동화할 수 있습니다.
PowerShell은 강력한 유틸리티이자 스크립팅 언어이지만, 특히 .NET Framework 환경에 익숙하지 않은 경우 이해하고 사용하는 데 시간이 다소 걸립니다. 이 글과 예제 스크립트가 PowerShell을 이해하고자 하는 모든 분께 도움이 되기를 바랍니다. 하지만 이 글에서 만든 예제 스크립트는 매우 간단합니다. 더 복잡한 애플리케이션을 지원하도록 더욱 완벽하게 구축하고 개발할 수 있다고 생각합니다.
Windows 10에서 컴퓨터 속성(또는 시스템 속성)을 열려면 다음 6가지 방법 중 하나를 사용할 수 있습니다.
게스트 Wi-Fi 네트워크를 적절히 잠그면 다른 정보를 공유하지 않고도 방문자와 인터넷 연결을 공유할 수 있습니다.
이 글에서는 WebTech360에서 Windows 11에서 방화벽을 끄는 방법을 안내해드립니다.
처음 컴퓨터를 샀을 때는 몇 초 만에 부팅되고 꿈처럼 작동했습니다. 하지만 시간이 지나면서 상황은 달라졌습니다.
이 문서는 .tmp 파일을 삭제하는 방법에 대한 내용이며, 인터넷 기록이나 브라우저 캐시를 지우는 방법에 대한 내용은 아닙니다.
성능을 최적화하고, 배터리를 절약하고, RAM 소모를 줄이려면 Windows 11 백그라운드 앱을 끌 수 있습니다.
VPN을 설치하면 Windows 11 컴퓨터의 보안을 더욱 강화할 수 있습니다.
Windows는 PC 인터페이스를 사용자 지정하고, 편안함을 개선하고, 심지어 완전히 핸즈프리로 작업을 수행하는 데 이상적인 여러 가지 유용한 접근성 옵션을 제공합니다.
Windows 10에서 Microsoft는 설정이라는 새로운 애플리케이션을 통합했습니다. 이 설정 애플리케이션은 Microsoft가 기존 제어판 애플리케이션을 대체하기 위해 만든 Metro 애플리케이션입니다.
시스템의 큰 폴더는 시스템 공간을 많이 차지하는 주범 중 하나입니다. 삭제한 후 생성한 많은 폴더가 시간이 지나면 다시 나타납니다. 아마도 삭제하려고 하는 폴더는 쓸모없는 폴더일 수 있습니다.
ISP에서 제공하는 기본 DNS 서버가 느리거나, 안전하지 않거나, 신뢰할 수 없다면 사용하지 않아도 됩니다. Windows 11 컴퓨터에서 DNS 서버 설정을 변경하는 방법은 다음과 같습니다.
GodeMode는 바로가기 Windows Master Control Panel이라고 합니다. GodMode(또는 God Mode)는 Windows 운영 체제의 모든 기능을 설정하고 액세스할 수 있는 제어판입니다.
TP Link 모뎀의 비밀번호나 WiFi 이름을 변경하려면 사용자는 해당 모뎀 회선의 주소로 로그인해야 합니다. 그렇다면 TP Link 모뎀 로그인 주소는 무엇일까요?
비디오 일러스트와 함께 Windows 10에서 BIOS에 들어가는 방법을 알려드립니다.
Windows 11의 검색 기능은 컴퓨터에 있는 파일과 앱뿐만 아니라 Microsoft 계정에 연결된 클라우드 저장소에서도 결과를 가져옵니다.
Windows 10에서 컴퓨터 속성(또는 시스템 속성)을 열려면 다음 6가지 방법 중 하나를 사용할 수 있습니다.
게스트 Wi-Fi 네트워크를 적절히 잠그면 다른 정보를 공유하지 않고도 방문자와 인터넷 연결을 공유할 수 있습니다.
이 글에서는 WebTech360에서 Windows 11에서 방화벽을 끄는 방법을 안내해드립니다.
처음 컴퓨터를 샀을 때는 몇 초 만에 부팅되고 꿈처럼 작동했습니다. 하지만 시간이 지나면서 상황은 달라졌습니다.
이 문서는 .tmp 파일을 삭제하는 방법에 대한 내용이며, 인터넷 기록이나 브라우저 캐시를 지우는 방법에 대한 내용은 아닙니다.
성능을 최적화하고, 배터리를 절약하고, RAM 소모를 줄이려면 Windows 11 백그라운드 앱을 끌 수 있습니다.
VPN을 설치하면 Windows 11 컴퓨터의 보안을 더욱 강화할 수 있습니다.
Windows는 PC 인터페이스를 사용자 지정하고, 편안함을 개선하고, 심지어 완전히 핸즈프리로 작업을 수행하는 데 이상적인 여러 가지 유용한 접근성 옵션을 제공합니다.
Windows 10에서 Microsoft는 설정이라는 새로운 애플리케이션을 통합했습니다. 이 설정 애플리케이션은 Microsoft가 기존 제어판 애플리케이션을 대체하기 위해 만든 Metro 애플리케이션입니다.
시스템의 큰 폴더는 시스템 공간을 많이 차지하는 주범 중 하나입니다. 삭제한 후 생성한 많은 폴더가 시간이 지나면 다시 나타납니다. 아마도 삭제하려고 하는 폴더는 쓸모없는 폴더일 수 있습니다.
ISP에서 제공하는 기본 DNS 서버가 느리거나, 안전하지 않거나, 신뢰할 수 없다면 사용하지 않아도 됩니다. Windows 11 컴퓨터에서 DNS 서버 설정을 변경하는 방법은 다음과 같습니다.
GodeMode는 바로가기 Windows Master Control Panel이라고 합니다. GodMode(또는 God Mode)는 Windows 운영 체제의 모든 기능을 설정하고 액세스할 수 있는 제어판입니다.
TP Link 모뎀의 비밀번호나 WiFi 이름을 변경하려면 사용자는 해당 모뎀 회선의 주소로 로그인해야 합니다. 그렇다면 TP Link 모뎀 로그인 주소는 무엇일까요?
비디오 일러스트와 함께 Windows 10에서 BIOS에 들어가는 방법을 알려드립니다.
Windows 11의 검색 기능은 컴퓨터에 있는 파일과 앱뿐만 아니라 Microsoft 계정에 연결된 클라우드 저장소에서도 결과를 가져옵니다.