때때로 한 번에 하나씩 함께 실행되는 PowerShell 스크립트 그룹이 있습니다. 각 스크립트에는 특정 스냅인이로드되어야합니다.
지금은 각 스크립트가 Add-PSSnapin XYZ
처음에 호출 되고 있습니다.
이제 여러 스크립트를 연속적으로 실행하면 후속 스크립트가 다음을 던집니다.
Windows PowerShell 스냅인 XYZ가 추가 되었기 때문에 추가 할 수 없습니다. 스냅인의 이름을 확인하고 다시 시도하십시오.
Add-PSSnapin을 호출하기 전에 각 스크립트에서 스냅인이 이미로드되었는지 확인하도록하려면 어떻게해야합니까?
답변
Snapin을 쿼리하지만 찾을 수없는 경우 오류가 발생하지 않도록 PowerShell에 알리는 다음과 같은 작업을 수행 할 수 있어야합니다.
if ( (Get-PSSnapin -Name MySnapin -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin MySnapin
}
답변
Scott은 이미 답을주었습니다. 어쨌든로드하고 이미로드 된 경우 오류를 무시할 수도 있습니다.
Add-PSSnapin -Name <snapin> -ErrorAction SilentlyContinue
답변
놀랍게도 스크립트가 종속성을 지정하는 기본 방법 인 #REQUIRES -PSSnapin Microsoft.PowerShell...
주석 / 전 처리기 지시문을 언급 한 사람은 아무도 없습니다 . 마찬가지로 -RunAsAdministrator
,를 사용하는 모듈 -Modules Module1,Module2
및 특정 Runspace 버전을 사용하여 상승이 필요할 수 있습니다.
입력하여 자세히 알아보기 Get-Help about_requires
답변
@ScottSaad의 코드 샘플을 시도했지만 작동하지 않았습니다. 나는 그 이유를 정확히 알지 못했지만 수표는 신뢰할 수 없었고 때로는 성공하고 때로는 그렇지 않았습니다. 속성 에서 Where-Object
필터링 을 사용하는 Name
것이 더 효과적 이라는 것을 알았습니다 .
if ((Get-PSSnapin | ? { $_.Name -eq $SnapinName }) -eq $null) {
Add-PSSnapin $SnapinName
}
의 코드 예의 이 .
답변
Scott Saads는 작동하지만 이것은 나에게 다소 빠른 것 같습니다. 나는 그것을 측정하지 않았지만 오류 메시지를 생성하지 않기 때문에 조금 더 빨리로드되는 것 같습니다.
$snapinAdded = Get-PSSnapin | Select-String $snapinName
if (!$snapinAdded)
{
Add-PSSnapin $snapinName
}