2017-12-31 50 views

답변

1

당신은 어셈블리와 함께 이름으로 GAC에 이미 있는지 여부를 확인할 수 있습니다 :

$AssemblyName = [System.Reflection.AssemblyName]::GetAssemblyName("C:\Path\to\assembly.dll") 
$IsInGAC = [System.Reflection.Assembly]::ReflectionOnlyLoad($AssemblyName).GlobalAssemblyCache 

당신은 귀하의 의견 어셈블리 필터링 테스트 함수에 그 포장 수 :

function Test-GACPresence { 
    param(
     [Parameter(Mandatory=$true,ParameterSetName='Path')] 
     [string]$Path, 

     [Parameter(Mandatory=$true,ParameterSetName='LiteralPath',ValueFromPipelineByPropertyName=$true)] 
     [Alias('PsPath')] 
     [string]$LiteralPath 
    ) 

    $LiteralPath = if($PSCmdlet.ParameterSetName -eq 'Path'){ 
     (Resolve-Path $Path).ProviderPath 
    } else { 
     (Resolve-Path $LiteralPath).ProviderPath 
    } 

    try{ 
     return [System.Reflection.Assembly]::ReflectionOnlyLoad([System.Reflection.AssemblyName]::GetAssemblyName($LiteralPath)).GlobalAssemblyCache 
    } 
    catch{ 
     return $false 
    } 
} 

$ExistsInGAC = Get-ChildItem "path\to\test" -Filter *.dll -Recurse |?{$_|Test-GACPresence} 
$ExistsInGAC |Remove-Item 
+0

을 오타가 있습니까 결국? 아마 그것이 항목이 아니라 원격 항목이어야합니다. –

+0

@Mathias R. Jessen이 작업은 훌륭했습니다. 그러나 어셈블리 파일 이름이 아니라 어셈블리 파일 버전을 고려해야한다고 생각하지 않습니다. 어셈블리 파일 버전을 확인하기위한 지침을 제공 하시겠습니까? – PatrickNolan

+0

@ MathiasR.Jessen을 반복하면 위의 참조가 제대로 작동하는지 확실하지 않습니다. – PatrickNolan