간단한 설명
세션에서 사용되는 네임스페이스를 나타낼 수 있습니다.
긴 설명
이 using 문을 사용하면 세션에서 사용되는 네임스페이스를 지정할 수 있습니다. 네임스페이스를 추가하면 .NET 클래스 및 멤버의 사용이 간소화되고 스크립트 모듈 및 어셈블리에서 클래스를 가져올 수 있습니다.
using 문은 스크립트 또는 모듈의 다른 문 앞에 와야 합니다. 매개 변수를 포함하여 주석 처리되지 않은 문이 앞에 섰을 수 없습니다.
using 문에는 변수가 없어야 합니다.
이 using 문을 변수의 scope 한정자와 혼동 using: 해서는 안 됩니다. 자세한 내용은 about_Remote_Variables에서 확인하십시오.
네임스페이스 구문
형식을 확인할 .NET 네임스페이스를 지정하려면 다음을 수행합니다.
using namespace <.NET-namespace>
네임스페이스를 지정하면 짧은 이름으로 형식을 보다 쉽게 참조할 수 있습니다.
모듈 구문
PowerShell 모듈에서 클래스를 로드하려면 다음을 수행합니다.
using module <module-name>
<module-name> 값은 모듈 이름, 전체 모듈 사양 또는 모듈 파일 경로일 수 있습니다.
<module-name> 경로인 경우 경로는 정규화되거나 상대 경로가 될 수 있습니다. 상대 경로는 using 문을 포함하는 스크립트를 기준으로 확인됩니다.
<module-name> 이름 또는 모듈 사양인 경우 PowerShell은 PSModulePath 지정된 모듈을 검색합니다.
모듈 사양은 다음 키가 있는 해시 테이블입니다.
-
ModuleName- 필수 모듈 이름을 지정합니다. -
GUID- 선택적 모듈의 GUID를 지정합니다. - 또한 아래 세 가지 키 중 하나를 지정해야 합니다 . 이러한 키는 함께 사용할 수 없습니다.
-
ModuleVersion- 모듈의 허용 가능한 최소 버전을 지정합니다. -
RequiredVersion- 모듈의 정확한 필수 버전을 지정합니다. -
MaximumVersion- 모듈의 허용되는 최대 버전을 지정합니다.
-
이 using module 문은 스크립트 모듈 또는 이진 모듈의 루트 모듈(ModuleToProcess)에서 클래스를 가져옵니다. 중첩된 모듈에 정의된 클래스 또는 모듈에 점 소스가 지정된 스크립트에 정의된 클래스를 일관되게 가져오지 않습니다. 모듈 외부의 사용자가 사용할 수 있도록 하려는 클래스는 루트 모듈에서 정의해야 합니다.
스크립트 모듈을 개발하는 동안 코드를 변경한 다음 Import-Module 매개 변수와 함께 새 버전의 모듈을 로드하는 것이 일반적입니다. 이는 루트 모듈의 함수 변경에 대해서만 작동합니다.
Import-Module 중첩된 모듈을 다시 로드하지 않습니다. 또한 업데이트 된 클래스를로드 할 수있는 방법이 없습니다.
최신 버전을 실행하고 있는지 확인하려면 cmdlet을 사용하여 모듈을 언로드해야 합니다 Remove-Module .
Remove-Module 루트 모듈, 모든 중첩 모듈 및 모듈에 정의된 모든 클래스를 제거합니다. 그런 다음 모듈과 클래스 using Import-Module 및 명령문을 다시로드 할 수 있습니다 using module .
어셈블리 구문
.NET 어셈블리에서 형식을 미리 로드하려면:
using assembly <.NET-assembly-path>
어셈블리를 로드하면 구문 분석 시 해당 어셈블리의 .NET 형식이 스크립트로 미리 로드됩니다. 이렇게 하면 미리 로드된 어셈블리의 형식을 사용하는 새 PowerShell 클래스를 만들 수 있습니다.
새 PowerShell 클래스를 만들지 않는 경우 대신 cmdlet을 Add-Type 사용합니다. 자세한 내용은 추가 형식참조하세요.
예시
예제 1 - typename 확인을 위한 네임스페이스 추가
다음 스크립트는 "Hello World" 문자열에 대한 암호화 해시를 가져옵니다.
using namespace System.Text 와 가 using namespace System.IO in [UnicodeEncoding] 및 System.Text[Stream] in [MemoryStream]에 대한 System.IO 참조를 어떻게 단순화하는지 주목하십시오.
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)
$hashfromstream = Get-FileHash -InputStream $memorystream `
-Algorithm $algorithm
$hashfromstream.Hash.ToString()
예제 2 - 스크립트 모듈에서 클래스 로드
이 예제에는 다음 클래스를 정의하는 CardGames 라는 PowerShell 스크립트 모듈이 있습니다.
- 카드게임.데크
- 카드게임.카드
Import-Module 및 #requires 문은 모듈에서 정의한 대로 모듈 함수, 별칭 및 변수만 가져옵니다. 클래스는 가져오지 않습니다.
using module 명령은 모듈을 가져오고 클래스 정의도 로드합니다.
using module CardGames
using namespace CardGames
[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)
예제 3 - 어셈블리에서 클래스 로드Example 3 - Load classes from an assembly
이 예제에서는 해당 클래스를 사용하여 새 PowerShell 클래스를 만들 수 있도록 어셈블리를 로드합니다. 다음 스크립트는 DirectoryContext 클래스에서 파생된 새 PowerShell 클래스를 만듭니다.
using assembly 'C:\Program Files\PowerShell\7\System.DirectoryServices.dll'
using namespace System.DirectoryServices.ActiveDirectory
class myDirectoryClass : System.DirectoryServices.ActiveDirectory.DirectoryContext
{
[DirectoryContext]$domain
myDirectoryClass([DirectoryContextType]$ctx) : base($ctx)
{
$this.domain = [DirectoryContext]::new([DirectoryContextType]$ctx)
}
}
$myDomain = [myDirectoryClass]::new([DirectoryContextType]::Domain)
$myDomain
domain Name UserName ContextType
------ ---- -------- -----------
System.DirectoryServices.ActiveDirectory.DirectoryContext Domain