2012-11-20 5 views
0

사용자 지정 개체 배열을 이러한 개체를 추가 처리 할 수있는 함수에 전달하려고합니다. 사용자 지정 개체 배열을 함수에 전달

Function GetNetworkAdapterList 
{ 
    # Get a list of available Adapters 
    $hnet = New-Object -ComObject HNetCfg.HNetShare 
    $netAdapters = @() 
    foreach ($i in $hnet.EnumEveryConnection) 
    { 
     $netconprop = $hnet.NetConnectionProps($i) 
     $inetconf = $hnet.INetSharingConfigurationForINetConnection($i) 

     $netAdapters += New-Object PsObject -Property @{ 
       Index = $index 
       Guid = $netconprop.Guid 
       Name = $netconprop.Name 
       DeviceName = $netconprop.DeviceName 
       Status = $netconprop.Status 
       MediaType = $netconprop.MediaType 
       Characteristics = $netconprop.Characteristics 
       SharingEnabled = $inetconf.SharingEnabled 
       SharingConnectionType = $inetconf.SharingConnectionType 
       InternetFirewallEnabled = $inetconf.InternetFirewallEnabled 
       SharingConfigurationObject = $inetconf 
       } 
     $index++ 
    } 
    return $netAdapters 
} 

그런 다음 내 주요 코드에서이 같은 기능 이상 전화 :

여기 내 사용자 정의 개체 배열 생성 함수의

$netAdapterList = GetNetworkAdapterList 

$ netAdapterList가 예상 데이터를 반환, 그리고 나는 다음과 같이 할 수있다 :

$netAdapterList | fl Name, DeviceName, Guid, SharingEnabled 

지금까지 그렇게 좋았다.

Function ShowAdapters($netAdapterListParam) 
{ 
    $netAdapterListParam | fl Name, DeviceName, Guid, SharingEnabled 
} 

를 그리고 난 이런 식으로 호출 :

ShowAdapters $netAdapterList 

지금 나는이 같은 더미 기능을 만든 $ netAdapterList

에서 함수 통과를 호출 할

아무 것도 인쇄되지 않습니다.

나는 함수의 서명을 변경하려고했지만 여전히 행운 :

Function ShowAdapters([Object[]]$netAdapterListParam) 

Function ShowAdapters([Object]$netAdapterListParam) 

Function ShowAdapters([PSObject[]]$netAdapterListParam)  

Function ShowAdapters([array]$netAdapterListParam) 

아무도 내가 잘못 알고? 함수 내에서 내 사용자 정의 객체에 어떻게 접근 할 수 있습니까?

답변

0

답장을 보내 주셔서 감사합니다. @Christian. 귀하의 단계를 시도, 껍질에 붙여 넣기 비트와 조각을 복사하고 실제로 일했습니다. 그러나 전체 .ps1 스크립트를 실행하면 아무것도 인쇄되지 않습니다.

ShowAdapters 함수 내에서 Powershell IDE 설정 중단 점에서 스크립트를 실행했으며 $netAdapterListParam에는 실제로 전달되는 예상 사용자 정의 개체 배열이 있으므로 FL 커맨드 릿에있는 문제를 좁혀 냈습니다.트릭과 4 곳했던

$formatted = $netAdapterListParam | fl Name, DeviceName, Guid, SharingEnabled | Out-String 
Write-Host $formatted 

화면에 인쇄 된 : 나를 위해 작동하지 않았다 몇 가지 이유 $netAdapterList | fl Name, DeviceName, Guid, SharingEnabled를 들어

는, 그래서 대신 다음 사용하여 끝났다. Win7에 내장

1) 파워 쉘 IDE 사용자 정의 개체를 포맷 할 때 기발한 될 수 디버깅 스크립트 2)를 Format-List에 대한 매우 유용한 도구가 될 수 있으므로 아웃 문자열이 필요했다 :

교훈을 배웠습니다.

0

난 그냥 말할 수 있습니다

1 내가 사본을했습니다 내 PowerShell 콘솔에 GetNetworkAdapterList 기능을 붙여 넣습니다.

2 - 나는 사본을했습니다 내 PowerShell 콘솔에서 $netAdapterList = GetNetworkAdapterList을 붙여

3 내가 사본을했습니다 및 ShowAdapters $netAdapterList

및 획득을 실행

3- 내 PowerShell 콘솔에 ShowAdapters 기능을 붙여 압축 된 결과 : 필터링 된 모든 네트워크 어댑터의 목록 Name, DeviceName, Guid, SharingEnabled

코드가 작동하지만 잘못된 것은 모르지만 새로운 powe로 시작하십시오. rshell 콘솔을 사용하고 내가하는 일을하십시오.

+0

답장을 보내 주셔서 감사합니다. PowerShell IDE에서 ShowAdapters 함수 내에서 중단 점을 설정하는 스크립트를 실행했습니다. 매개 변수 $ netAdapterListParam에는 실제로 예상되는 사용자 지정 개체가 있으므로 FL 커맨드 릿에 포함되도록이 문제를 좁혔습니다. – donhector

+0

@donhector 필자에게 PowerShell Console/ISE v2.0 및 3.0에서 코드 작업 (질문에 따라 복사하여 붙여 넣기)을 수행합니다. Format-List cmdlet에는 문제가 없습니다. –

관련 문제