다음을 통해 공유


about_Operators

간단한 설명

PowerShell에서 지원하는 연산자를 설명합니다.

자세한 설명

연산자는 명령이나 식에서 사용할 수 있는 언어 요소입니다. PowerShell은 값을 조작하는 데 도움이 되는 여러 유형의 연산자를 지원합니다.

산술 연산자

산술 연산자(+, , -, */,%)를 사용하여 명령 또는 식의 값을 계산합니다. 이러한 연산자를 사용하면 값을 추가, 빼기, 곱하거나 나누기하고 나누기 작업의 나머지(모듈러스)를 계산할 수 있습니다.

더하기 연산자는 요소를 연결합니다. 곱하기 연산자는 각 요소의 지정된 복사본 수를 반환합니다. 이러한 연산자를 구현하는 모든 .NET 형식에서 산술 연산자를 사용할 수 있습니다(예: Int, String, DateTimeHashtable배열).

비트 연산자(-band, , -bor-bxor, -bnot, -shr-shl)는 값의 비트 패턴을 조작합니다.

자세한 내용은 about_Arithmetic_Operators 참조하세요.

할당 연산자

할당 연산자(=,, +=, -=, *=, /=%=)를 사용하여 변수에 값을 할당, 변경 또는 추가합니다. 산술 연산자를 할당과 결합하여 산술 연산 결과를 변수에 할당할 수 있습니다.

자세한 내용은 about_Assignment_Operators 참조하세요.

비교 연산자

비교 연산자(-eq, , -ne, -gt-lt, -le) -ge를 사용하여 값과 테스트 조건을 비교합니다. 예를 들어 두 문자열 값을 비교하여 같은지 여부를 확인할 수 있습니다.

비교 연산자는 텍스트에서 패턴을 찾거나 바꾸는 연산자도 포함합니다. (-match, -notmatch, -replace) 연산자는 정규식을 사용하고(-like, -notlike) 와일드카드를 *사용합니다.

포함 비교 연산자는 테스트 값이 참조 집합(-in, , -notin,-contains-notcontains)에 표시되는지 여부를 결정합니다.

형식 비교 연산자(-is, -isnot)는 개체가 지정된 형식인지 여부를 결정합니다.

자세한 내용은 about_Comparison_Operators 참조하세요.

논리 연산자

논리 연산자(-and, , -or, -not-xor) !를 사용하여 조건문을 단일 복합 조건부에 연결합니다. 예를 들어 논리 -and 연산자를 사용하여 서로 다른 두 조건을 가진 개체 필터를 만들 수 있습니다.

자세한 내용은 about_Logical_Operators 참조하세요.

리디렉션 연산자

리디렉션 연산자(>, >>, , 2>>2>2>&1)를 사용하여 명령 또는 식의 출력을 텍스트 파일로 보냅니다. 리디렉션 연산자는 매개 변수 없이 cmdlet처럼 Out-File 작동하지만 오류 출력을 지정된 파일로 리디렉션할 수도 있습니다. cmdlet을 사용하여 출력을 Tee-Object 리디렉션할 수도 있습니다.

자세한 내용은 about_Redirection 참조 하세요.

분할 및 조인 연산자

-split-join 연산자는 부분 문자열을 나누고 결합합니다. -split 연산자는 문자열을 부분 문자열로 분할합니다. 연산자는 -join 여러 문자열을 단일 문자열로 연결합니다.

자세한 내용은 about_Splitabout_Join 참조하세요.

형식 연산자

형식 연산자(-is, -isnot, -as)를 사용하여 개체의 .NET 형식을 찾거나 변경할 수 있습니다.

자세한 내용은 about_Type_Operators 참조하세요.

단항 연산자

단항 ++-- 연산자를 사용하여 값을 증가 또는 감소시키고 - 부정할 수 있습니다. 예를 들어 변수 $a 9 를 증분하려면 .를 입력$a++합니다10.

자세한 내용은 about_Arithmetic_Operators 참조하세요.

특수 연산자

특수 연산자에는 다른 연산자 그룹에 맞지 않는 특정 사용 사례가 있습니다. 예를 들어 특수 연산자를 사용하면 명령을 실행하거나, 값의 데이터 형식을 변경하거나, 배열에서 요소를 검색할 수 있습니다.

그룹화 연산자 ( )

다른 언어와 마찬가지로 식 (...) 에서 연산자 우선 순위를 재정의하는 역할을 합니다. 예: (1 + 2) / 3

그러나 PowerShell에는 추가 동작이 있습니다.

결과 식 그룹화

(...)를 사용하면 명령의 출력이 식에 참여하도록 할 수 있습니다. 예시:

PS> (Get-Item *.txt).Count -gt 10
True

참고 항목

명령을 괄호로 래핑하면 묶은 명령 자체가 로 설정된 경우에도 자동 변수 $? 가 설정 $true$? 됩니다$false. 예를 들어 (Get-Item /Nosuch); $? 예기치 않게 True를 생성 합니다. 자세한 $?내용은 about_Automatic_Variables 참조하세요.

그룹화된 식 파이핑

파이프라인의 첫 번째 세그먼트로 사용되는 경우 명령이나 식을 괄호로 래핑하면 식 결과가 항상 열거 됩니다. 괄호가 명령을 래핑하면 결과가 파이프라인을 통해 전송되기 전에 메모리에 수집된 모든 출력으로 완료됩니다.

예를 들어 이러한 문의 출력은 다음과 같습니다.

PS> ConvertFrom-Json '["a", "b"]'   | ForEach-Object { "The value is '$_'" }

The value is 'a b'

PS> (ConvertFrom-Json '["a", "b"]') | ForEach-Object { "The value is '$_'" }

The value is 'a'
The value is 'b'

또한 파이핑 전에 식을 그룹화하면 후속 개체별 처리가 명령이 출력을 생성하는 데 사용하는 열거형을 방해할 수 없습니다.

예를 들어 출력 Get-ChildItem 을 파이핑하면 Rename-Item 항목의 이름이 변경된 다음 다시 검색되고 두 번째로 이름이 바뀐 예기치 않은 영향을 미칠 수 있습니다.

할당 문 그룹화

그룹화되지 않은 대입 문은 값을 출력하지 않습니다. 할당 문을 그룹화할 때 할당된 변수의 값이 전달되며 더 큰 식에서 사용할 수 있습니다. 예시:

PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True

문을 괄호로 래핑하면 값을 $var출력하는 식으로 바뀝니다.

이 동작은 복합 연산자(예: +=복합 연산자) 및 증가() 및 감소(++--) 연산자를 비롯한 모든 할당 연산자에도 적용됩니다. 그러나 증가 및 감소에 대한 작업 순서는 해당 위치에 따라 달라집니다.

PS> $i = 0
PS> (++$i) # prefix
1
PS> $i = 0
PS> ($i++) # postfix
0
PS> $i
1

접두사에서 값 $i 은 출력되기 전에 증가합니다. 후위 사례에서 값 $i 은 출력된 후 증가합니다.

문과 같은 if 조건문의 컨텍스트에서 이 기술을 사용할 수도 있습니다.

if ($textFiles = Get-ChildItem *.txt) {
    $textFiles.Count
}

이 예제에서 일치하는 Get-ChildItem 파일이 없으면 명령은 아무 것도 반환하지 않고 부울 컨텍스트에서 고려되는 $false 아무 것도 할당하지 않습니다$textFiles. 하나 이상의 FileInfo 개체가 $textFiles할당된 경우 조건부 값은 .로 $true계산됩니다. 문 본문의 $textFiles 값을 사용하여 작업할 if 수 있습니다.

참고 항목

이 기술은 편리하고 간결하지만 대입 연산자()와 같음 비교 연산자(=-eq)가 혼동을 초래할 수 있습니다.

하위 식 연산자 $( )

하나 이상의 문의 결과를 반환합니다. 단일 결과의 경우 스칼라를 반환합니다. 여러 결과에 대해 배열을 반환합니다. 다른 식 내에서 식을 사용하려는 경우 이를 사용합니다. 예를 들어 명령 결과를 문자열 식에 포함할 수 있습니다.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

배열 하위 식 연산자 @( )

하나 이상의 문의 결과를 배열로 반환합니다. 결과는 항상 0개 이상의 개체 배열입니다.

PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
0

해시 테이블 리터럴 구문 @{}

배열 하위 식과 마찬가지로 이 구문은 해시 테이블을 선언하는 데 사용됩니다. 자세한 내용은 about_Hash_Tables 참조하세요.

호출 연산자 &

명령, 스크립트 또는 스크립트 블록을 실행합니다. 호출 연산자라고 도 하는 호출 연산자를 사용하면 변수에 저장되고 문자열 또는 스크립트 블록으로 표현되는 명령을 실행할 수 있습니다. 호출 연산자는 자식 범위에서 실행됩니다. 범위에 대한 자세한 내용은 about_Scopes 참조하세요. 이를 사용하여 필요한 명령, 매개 변수 및 인수가 포함된 문자열을 빌드한 다음 명령인 것처럼 문자열을 호출할 수 있습니다. 만드는 문자열은 명령줄에 입력하는 명령과 동일한 구문 분석 규칙을 따라야 합니다. 자세한 내용은 about_Parsing 참조하세요.

다음은 문자열에 명령을 저장하고 호출 연산자를 사용하여 실행하는 예제입니다.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

호출 연산자는 문자열을 구문 분석하지 않습니다. 즉, 호출 연산자를 사용할 때 문자열 내에서 명령 매개 변수를 사용할 수 없습니다.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Invoke-Expression cmdlet은 호출 연산자를 사용할 때 구문 분석 오류를 일으키는 코드를 실행할 수 있습니다.

PS> & "1+1"
&: The term '1+1' is not recognized as a name of a cmdlet, function, script
file, or executable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

파일 이름을 사용하여 스크립트를 실행할 수 있습니다. 스크립트 파일에는 .ps1 실행 가능한 파일 확장명이 있어야 합니다. 경로에 공백이 있는 파일은 따옴표로 묶어야 합니다. 따옴표 붙은 경로를 실행하려고 하면 PowerShell은 스크립트를 실행하는 대신 따옴표 붙은 문자열의 내용을 표시합니다. 호출 연산자를 사용하면 파일 이름을 포함하는 문자열의 내용을 실행할 수 있습니다.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

스크립트 블록에 대한 자세한 내용은 about_Script_Blocks 참조하세요.

캐스트 연산자 [ ]

개체를 지정된 형식으로 변환하거나 제한합니다. 개체를 변환할 수 없으면 PowerShell에서 오류가 발생합니다.

[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'

캐스트 표기법을 사용하여 변수를 할당할 때 캐스트를 수행할 수도 있습니다.

쉼표 연산자 ,

이진 연산자로, 쉼표는 배열을 만들거나 생성되는 배열에 추가합니다. 식 모드에서 단항 연산자로 쉼표는 하나의 멤버만 있는 배열을 만듭니다. 멤버 앞에 쉼표 배치

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Write-Output 인수가 예상되므로 식을 괄호 안에 넣어야 합니다.

점 소싱 연산자 .

스크립트가 만드는 함수, 별칭 및 변수가 현재 범위에 추가되어 기존 범위를 재정의하도록 현재 범위에서 스크립트를 실행합니다. 스크립트에서 선언한 매개 변수는 변수가 됩니다. 값이 지정되지 않은 매개 변수는 값이 없는 변수가 됩니다. 그러나 자동 변수 $args 는 유지됩니다.

. c:\scripts\sample.ps1 1 2 -Also:3

참고 항목

점 소싱 연산자 뒤에 공백이 잇습니다. 공간을 사용하여 현재 디렉터리를 나타내는 점(.) 기호와 점을 구분합니다.

다음 예제에서는 현재 디렉터리의 Sample.ps1 스크립트가 현재 범위에서 실행됩니다.

. .\sample.ps1

Format 연산자 -f

.NET 복합 서식 지정 기능에 대한 액세스를 제공합니다. 복합 서식 문자열은 형식 항목이라고 하는 인덱싱된 자리 표시자와 혼합된 고정 텍스트로 구성됩니다. 이러한 형식 항목은 목록의 개체에 해당합니다.

각 서식 항목의 형태와 구성 요소는 다음과 같습니다.

{index[,alignment][:formatString]}

여기서 중괄호({})의 짝이 반드시 맞아야 합니다.

서식 지정 작업을 통해 원래의 고정 텍스트와 목록에 있는 개체의 문자열 표현이 결합된 형태의 결과 문자열을 얻을 수 있습니다. 자세한 내용은 복합 서식 지정을 참조하세요.

연산자의 왼쪽에 복합 서식 문자열을 입력하고 연산자의 오른쪽에 서식을 지정할 개체를 입력합니다.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

"0" 사용자 지정 지정자를 사용하여 숫자 값을 0으로 패딩할 수 있습니다. 다음 : 0의 수는 서식이 지정된 문자열을 패딩할 최대 너비를 나타냅니다.

"{0:00} {1:000} {2:000000}" -f 7, 24, 365
07 024 000365

중괄호({})를 서식이 지정된 문자열에 유지해야 하는 경우 중괄호를 두 배로 늘려 이스케이프할 수 있습니다.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

인덱스 연산자 [ ]

배열 및 해시 테이블과 같은 인덱싱된 컬렉션에서 개체를 선택합니다. 배열 인덱스는 0부터 시작하므로 첫 번째 개체는 .로 [0]인덱싱됩니다. 음수 인덱스를 사용하여 마지막 값을 가져올 수도 있습니다. 해시 테이블은 키 값으로 인덱싱됩니다.

인덱스 목록이 지정된 경우 인덱스 연산자는 해당 인덱스에 해당하는 멤버 목록을 반환합니다.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

개체가 인덱싱된 컬렉션이 아닌 경우 인덱스 연산자를 사용하여 첫 번째 요소에 액세스하면 개체 자체가 반환됩니다. 첫 번째 요소 반환 $null이후의 인덱스 값입니다.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

파이프라인 연산자 |

앞에 오는 명령의 출력을 뒤에 오는 명령으로 보냅니다("파이프"). 출력에 둘 이상의 개체("컬렉션")가 포함된 경우 파이프라인 연산자는 개체를 한 번에 하나씩 보냅니다.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

범위 연산자 ..

범위 연산자를 사용하여 순차 정수 배열을 나타낼 수 있습니다. 범위 연산자가 조인한 값은 범위의 시작 및 끝 값을 정의합니다.

1..10
$max = 10
foreach ($a in 1..$max) {Write-Host $a}

범위를 역순으로 만들 수도 있습니다.

10..1
5..-5 | ForEach-Object {Write-Output $_}

범위의 시작 및 끝 값은 정수 또는 문자로 계산되는 식 쌍일 수 있습니다. 범위의 엔드포인트는 부호 있는 32비트 정수([int32])로 변환할 수 있어야 합니다. 값이 크면 오류가 발생합니다. 또한 범위가 배열에서 캡처되는 경우 결과 배열의 크기는 (또는256mb - 8)로 268435448 제한됩니다. .NET Framework에서 배열의 최대 크기입니다.

예를 들어 시작 및 끝 값에 열거형의 멤버를 사용할 수 있습니다.

PS> enum Food {
      Apple
      Banana = 3
      Kiwi = 10
    }
PS> [Food]::Apple..[Food]::Kiwi
0
1
2
3
4
5
6
7
8
9
10

Important

결과 범위는 열거형 값으로 제한되지 않습니다. 대신 제공된 두 값 사이의 값 범위를 나타냅니다. 범위 연산자를 사용하여 열거형의 멤버를 안정적으로 나타낼 수는 없습니다.

멤버 액세스 연산자 .

개체의 속성 및 메서드에 액세스합니다. 멤버 이름은 식일 수 있습니다.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

PowerShell 3.0부터 구성원이 없는 목록 컬렉션 개체에서 연산자를 사용하는 경우 PowerShell은 해당 컬렉션의 항목을 자동으로 열거하고 각 컬렉션의 연산자를 사용합니다. 자세한 내용은 about_Member-Access_Enumeration 참조하세요.

정적 멤버 연산자 ::

.NET 클래스의 정적 속성 및 메서드를 호출합니다. 개체의 정적 속성 및 메서드를 찾으려면 cmdlet의 Static 매개 변수를 Get-Member 사용합니다. 멤버 이름은 식일 수 있습니다.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

참고 항목