2017-12-11 9 views
-1

는 어떻게 얻을 수뿐만 아니라 텍스트를 확인 였는지를 통과? (작업 없음)파워 쉘을 호출 스크립트 블록

$Procname = 'notepad' 
$chk = (Get-Process | Where-Object {$_.Name -eq $Procname}) 

Invoke-Command -ComputerName sandbox -ScriptBlock { 

    if ($chk -eq $null) { 
     Write-Host 'null' -ForegroundColor Red 
    } else { 
     Write-Host running -ForegroundColor Green 
    } 
} 

문제는 내가 얻는 것입니다. Get-process | scriptblock 외부에서 실행될 객체는 어디에서 스크립트 블록 (IE $ Procname) 외부에서 텍스트를 전달할 수 있지만 명령을 전달하려고하는데 어떤 특수 작업을해야합니까?

나는 삼촌 구글에게 물었습니다. 그러나 나는 틀린 질문을하고 있다고 생각합니다.

나는 또한 파람과 인수로 $의 CHK 시도했지만 나를

+0

'$ ProcName'이 원격 서버에서 실행되고 있는지 확인하려고합니까? 아니면 원격 서버에서 실행되는 스크립트 블록 내에서'$ chk' (로컬 서버에서 실행)의 결과를 참조하려고합니까? – TheMadTechnician

+0

또한,'$ Procname'을 전달하지 않으므로, 실제로 생각한 것처럼 그 문자열에 실제로 액세스 할 수 없습니다. 당신이하고있는 일은 이름을 '$ null'과 동등한 프로세스를 찾는 것입니다 (즉, $ null). 그래서 항상 $ true -eq $ null이 맞는지 물어볼 것입니다. – TheMadTechnician

+0

원격 서버에서 $ Procname이 실행되고 있는지 확인하려고합니다. $ chk는 로컬 측이 아닌 원격 측에서 실행해야합니다. – madman

답변

0

좋아, 당신이 Invoke-Command를 통해 원격 실행에 지역 변수를 참조하는 방법을 알고 싶은 모양을 위해 그들이 작동하지 않았다. 완전히 $using: 컨텍스트로 수행 할 수있는 작업입니다. 예를 들어, 메모장 컴퓨터에서 실행중인 경우 스크립트의 모습은 볼 수 있도록하고, 당신이 할 수있는 원격 시스템에 그 결과 참조 : 당신이 메모장이 실행되고 있는지 확인하려면, 마찬가지로

$Procname = 'notepad' 
$chk = (Get-Process | Where-Object {$_.Name -eq $Procname}) 

Invoke-Command -ComputerName sandbox -ScriptBlock { 

    if ($using:chk -eq $null) { 
     Write-Host 'null' -ForegroundColor Red 
    } else { 
     Write-Host 'running' -ForegroundColor Green 
    } 
} 

을 원격 서버에서이 작업을 수행 할 수 있습니다 :

$Procname = 'notepad' 

Invoke-Command -ComputerName sandbox -ScriptBlock { 

    if ((Get-Process | Where-Object {$_.Name -eq $using:Procname}) -eq $null) { 
     Write-Host 'null' -ForegroundColor Red 
    } else { 
     Write-Host 'running' -ForegroundColor Green 
    } 
} 

을하지만 개인적으로 나는이 알아보기 힘들 생각, 나는 그것을 반대하고 할 거라고 :

$Procname = 'notepad' 

Invoke-Command -ComputerName sandbox -ScriptBlock { 

    if (Get-Process | Where-Object {$_.Name -eq $using:Procname}) { 
     Write-Host 'running' -ForegroundColor Green 
    } else { 
     Write-Host 'null' -ForegroundColor Red 
    } 
} 

을 또는 REM에 아무것도 실행하지 않고 직접 서버 :

$Procname = 'notepad' 
$chk = Get-Process -Computer sandbox | ?{$_.Name -eq $Procname} 
If($chk){ 
    Write-Host 'Running' -ForegroundColor Green 
}else{ 
    Write-Host 'Null' -ForegroundColor Red 
}