2010-12-09 4 views
16

내가 추가 한 현재 Powershell 세션 변수를 지우는 커맨드 릿이 있습니까?powershell 세션 지우기

Add-Type 커맨드 릿을 사용하고 있는데 "유형을 추가 할 수 없습니다. 유형 이름이 이미 있습니다."라는 오류 메시지가 나타납니다.

답변

7

Add-Type이 수행하는 기본 AppDomain으로로드 된 .NET 어셈블리를 언로드 할 수 없습니다. 유형이나 네임 스페이스의 이름을 바꿀 수 있지만 어느 시점에서는 PowerShell을 끝내고 다시 시작하면됩니다.

이것은 .NET/CLR 제한 사항만큼 PowerShell 제한 사항이 아닙니다. 나중에 언로드 할 수있는 별도의 AppDomains로 .NET 어셈블리를로드 할 수는 있지만 코드를 직접 작성해야하며 별도 AppDomain에서 사용할 유형에 제한을 둡니다. 즉, 이러한 유형은 .NET Remoting을 통해 작업해야하므로 MarshByRefObject에서 파생되어야하거나 직렬화 할 수 있어야합니다. (이는 속성에 의해 참조되는 모든 개체에 적용되며 개체 그래프 아래에 적용됩니다.)

+4

그러나 PowerShell 세션을 재설정하는 명령이 있습니까? – Agzam

+0

Add-Type을 통해 추가 된 어셈블리를 언로드 할 수있는 방법이 없습니다. PowerShell을 다시 시작해야합니다. Add-Type을 통해 어셈블리를로드하고 백그라운드 작업 (Start-Job)을 사용하여 이러한 유형을 실험 해 볼 수 있습니다. 각 작업은 작업이 완료되면 사라지는 새로운 PowerShell 인스턴스를 회전시킵니다. –

+0

하지만 스크립트에 인라인 C# 코드가 있다면 어떨까요? 스크립트를 디버깅하는 것을 힘들게 만듭니다. – Agzam

6

가능한 "주변의 일"이 스크립트가 종료 할 때 종료 새로운 파워 쉘 인스턴스를 시작 powershell .\yourScriptHere.ps1

입력 스크립트를 실행하려면 다음 PowerShell 창을 열고. 새 인스턴스에서 "재생"하려는 경우 호출을 powershell -NoExit .\yourScriptHere.ps1으로 변경하면 스크립트가 완료 될 때 새 인스턴스가 종료되지 않습니다. 다시 시작해야 할 때 exit을 입력하고 "위 화살표"키를 눌러 이전 명령을 가져옵니다. 모든 스크립트 출력이 같은 창에 나타납니다. 새로운 PowerShell 인스턴스를 시작하기위한 오버 헤드가 낮습니다. 랩톱에서 1 초 미만입니다.