2016-08-20 3 views
0

여기에 간단한 코드입니다 :은 PowerShell을 함수에서 파이프 라인을 통과하려고

$sccmexe ="C:\Program Files (x86)\SCCM Remote Control Toolset\CmRcViewer.exe" 
$ScriptName = $MyInvocation.MyCommand.Name 
Write-Host $ScriptName 
$a = Read-Host -Prompt 'Please type the computername (or Enter for list)' 
getcomputer $a 

foreach ($computer in $computers) { 
    if ((Test-Connection -ComputerName $computer -Count 1 -Quiet) -eq $true) { 
    & $sccmexe $computer 
    } else { 
    Write-Host "$computer offline" 
    } 
} 

는 내가 뭘 찾고하는 것 같다

function getcomputer() { 
    if (($a.Length) -eq "1") { 
    if (-not(Test-Path "C:\users\ka1\documents\listofmachines$a.txt")) { 
     Write-Host "File C:\users\ka1\documents\listofmachines$a.txt not Found" 
     exit 
    } 
    $comps = gc "C:\users\ka1\documents\listofmachines$a.txt" 
    } 
    if (-not($a)) { 
    if (-not(Test-Path "C:\users\ka1\documents\listofmachines.txt")) { 
     Write-Host "File C:\users\ka1\documents\listofmachines.txt not Found" 
     exit 
    } 
    $comps = gc "C:\users\ka1\documents\listofmachines.txt" 
    } 
    return $comps 
} 

getcomputer 기능이 여기에 처음 PowerShell에서 호출됩니다 간단하게, 그냥 메인 스크립트에 $Comps 파이프 라인 (컴퓨터를 처리 할 수 ​​있도록)을 반환합니다. 나는 그것을 $a으로 유지해야하며 그것을 변경하지 않고 $comps으로 변경해야합니까?

+0

당신이 그것을 사용하는 방법이 명확하지 않다 코드를 보면 왜 당신은 할 수 그냥'return $ comp'하지 마라. 또한 {} 중괄호는 불균형, 들여 쓰기는 오도 된 것입니다. 코드를 관련 최소값 ([MCVE] (https://stackoverflow.com/help/mcve))으로 줄이면 도움이됩니다. – wOxxOm

+0

return $ comp를 사용하고 싶지만 파이프 라인을 반환하지 않는 것 같습니다. 나는 뭔가를 얻지 못할 것이라고 확신한다. 이 코드는 내가 작업하고있는 listofmachinesx.txt 파일을 가져옵니다. listofmachinesa.txt가 있으면 모든 기계를로드하고 코딩 한 항목을로드합니다. –

답변

0

PowerShell 함수 return 모두 성공 출력 스트림에서 출력됩니다. 파이프 라인은 업스트림 cmdlet 또는 프로세스에서 성공 출력 스트림을 읽습니다. 변경하기 만하면 당신의 foreach loop to a ForEach-Object loop (! $_에 루프 변수를 변경) 및 파이프로 getcomputer에 연결 :

getcomputer $a | ForEach-Object { 
    if ((Test-Connection -ComputerName $_ -Count 1 -Quiet) -eq $true) { 
    ... 
    } else { 
    ... 
    } 
} 
+0

이것은 정말 대단합니다. 정확히 내가 원했던 것. –