about_Using

간단한 설명

세션에서 사용할 네임스페이스를 지정할 수 있습니다.

자세한 설명

using 문을 사용하면 세션에서 사용할 네임스페이스를 지정할 수 있습니다. 네임스페이스를 추가하면 .NET 클래스 및 멤버의 사용이 간소화되고 스크립트 모듈 및 어셈블리에서 클래스를 가져올 수 있습니다.

문은 using 스크립트 또는 모듈의 다른 문 앞에 와야 합니다. 매개 변수를 포함하여 주석 처리되지 않은 문이 앞에 섰을 수 없습니다.

문에는 using 변수가 없어야 합니다.

문은 using 변수에 using: 대한 범위 한정자와 동일하지 않습니다. 자세한 내용은 about_Remote_Variables 참조하세요.

네임스페이스 구문

.NET 네임스페이스에서 형식을 확인하려면 다음을 수행합니다.

using namespace <.NET-namespace>

네임스페이스를 지정하면 짧은 이름으로 형식을 보다 쉽게 참조할 수 있습니다.

예제 - typename 확인을 위한 네임스페이스 추가

다음 스크립트는 "헬로 월드" 문자열에 대한 암호화 해시를 가져옵니다.

에 대한 using namespace System.Text 참조 및 using namespace System.IO 단순화 방법을 확인합니다 [Stream]System.IO[UnicodeEncoding]System.Text[MemoryStream].

using namespace System.Text
using namespace System.IO

[string]$string = "Hello World"
## Valid values are "SHA1", "SHA256", "SHA384", "SHA512", "MD5"
[string]$algorithm = "SHA256"

[byte[]]$stringBytes = [UnicodeEncoding]::Unicode.GetBytes($string)

[Stream]$memoryStream = [MemoryStream]::new($stringBytes)
$getFileHashSplat = @{
    InputStream = $memoryStream
    Algorithm   = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()

모듈 구문

PowerShell 모듈에서 클래스 및 열거형을 로드하려면 다음을 수행합니다.

using module <module-name>

<module-name> 은 모듈 이름, 전체 모듈 사양 또는 모듈 파일 경로일 수 있습니다.

경로인 경우 <module-name> 경로는 정규화되거나 상대적일 수 있습니다. 상대 경로는 문이 있는 스크립트를 기준으로 확인됩니다 using .

이름 또는 모듈 사양인 경우 <module-name> PowerShell은 PSModulePath에서 지정된 모듈을 검색합니다.

모듈 사양은 다음 키가 있는 해시 테이블입니다.

  • ModuleName - 필수 모듈 이름을 지정합니다.
  • GUID - 선택 사항 모듈의 GUID를 지정합니다.
  • 또한 아래 세 가지 키 중 하나 이상을 지정해야 합니다 .
    • ModuleVersion - 모듈의 허용 가능한 최소 버전을 지정합니다.
    • MaximumVersion - 모듈의 허용되는 최대 버전을 지정합니다.
    • RequiredVersion - 모듈의 정확한 필수 버전을 지정합니다. 다른 버전 키에는 사용할 수 없습니다.

Import-Module 문은 #requires 모듈에서 정의한 대로 모듈 함수, 별칭 및 변수만 가져옵니다. 클래스 및 열거형은 가져오지 않습니다.

이 문은 스크립트 모듈 또는 이 using module 진 모듈의 루트 모듈(ModuleToProcess)에서 클래스 및 열거형을 가져옵니다. 중첩된 모듈 또는 루트 모듈에 점 소스가 지정된 스크립트에 정의된 클래스 또는 열거형을 일관되게 가져오지 않습니다. 루트 모듈에서 직접 모듈 외부의 사용자가 사용할 수 있도록 하려는 클래스 및 열거형을 정의합니다.

스크립트 모듈을 개발하는 동안 코드를 변경한 다음 Force 매개 변수를 사용하여 Import-Module 모듈의 새 버전을 로드하는 것이 일반적입니다. 이는 루트 모듈의 함수 변경에 대해서만 작동합니다. Import-Module 는 중첩된 모듈을 다시 로드하지 않습니다. 또한 업데이트된 클래스 또는 열거형을 로드할 수 있는 방법은 없습니다.

최신 버전을 실행하려면 새 세션을 시작해야 합니다. PowerShell에서 정의되고 문으로 using 가져온 클래스 및 열거형은 언로드할 수 없습니다.

예제 - 스크립트 모듈에서 클래스 로드

이 예제에서 CardGames라는 PowerShell 스크립트 모듈은 다음 클래스를 정의합니다.

  • 테크
  • 카드

Import-Module 문은 #requires 모듈에서 정의한 대로 모듈 함수, 별칭 및 변수만 가져옵니다. 클래스는 가져오지 않습니다. 이 using module 명령은 모듈을 가져오고 클래스 정의도 로드합니다.

using module CardGames

[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)

어셈블리 구문

다음 구문은 실행 시작 시 어셈블리에서 스크립트로 .NET 형식을 로드합니다. 어셈블리 파일에 대한 정규화된 경로를 사용해야 합니다.

using assembly <.NET-assembly-path>

using assembly 문은 cmdlet을 Add-Type 사용하는 것과 유사합니다. 그러나 cmdlet은 Add-Type 스크립트 실행이 시작될 때가 아니라 실행될 때 Add-Type 형식을 추가합니다. 자세한 내용은 추가 형식을 참조 하세요.

예제 - 어셈블리에서 형식 로드

다음은 데이터를 처리할 때 해당 클래스를 사용할 수 있도록 어셈블리를 로드하는 예제입니다. 다음 스크립트는 데이터를 YAML 형식으로 변환합니다.

using assembly './YamlDotNet.dll'
using namespace YamlDotNet

$yamlSerializer = [Serialization.Serializer]::new()

$info = [ordered]@{
  Inventory = @(
    @{ Name = 'Apples' ; Count = 1234 }
    @{ Name = 'Bagels' ; Count = 5678 }
  )
  CheckedAt = [datetime]'2023-01-01T01:01:01'
}

$yamlSerializer.Serialize($info)
Inventory:
- Name: Apples
  Count: 1234
- Name: Bagels
  Count: 5678
CheckedAt: 2023-01-01T01:01:01.0000000