2015-01-16 6 views
3

나는 Powershell 스크립트가 작동 중입니다. 외부 파일에서 scriptblock을 가져오고 싶습니다.파일에서 Scriptblock 가져 오기

작업 : |의 출력

$scriptblock = { ... } 
invoke-command -ComputerName $server -ScriptBlock $Scriptblock -ArgumentList $server,$team -Credential $credential -asjob -JobName Dashboard_$server -SessionOption (New-PSSessionOption -NoMachineProfile) 

"GET-작업이 -id 수신 작업을"

가 작동하지 괜찮 :의

# Generate scriptblock from file 
$file = Get-Content E:\Dashboard\Windows\winrm_scriptblock.txt 
$Scriptblock = $executioncontext.invokecommand.NewScriptBlock($file) 

invoke-command -ComputerName $server -ScriptBlock $Scriptblock -ArgumentList $server,$team -Credential $credential -asjob -JobName Dashboard_$server -SessionOption (New-PSSessionOption -NoMachineProfile) 

출력을 "얻을 -job-id | receive-job "이 비어 있습니다.

winrm_scriptblock.txt의 내용은 작업중인 버전에서 정의 된 scriptblock 변수의 중괄호 사이에 포함되는 내용입니다.

도움을 주시면 감사하겠습니다. 당신이 문자열을 저장하는 경우

+0

이 방법이 효과가 있습니까? '$ Scriptblock = [scriptblock] :: Create ((Get-Content E : \ 대시 보드 \ Windows \ winrm_scriptblock.txt))' – Matt

답변

1

Invoke-Command의 -FilePath 매개 변수를 사용하지 않는 이유는 무엇입니까?

+0

예 .txt를 .ps1 ....로 변경 한 후에 작동합니다.감사합니다 – kernelpanic

1

은 매우 How do I pass a scriptblock as one of the parameters in start-job

에서 답과 관련 "GET-ChildItem을 C : \ 온도를"파일 "E : \ 대시 보드 \ WINDOWS \ winrm_scriptblock.txt"에 다음이 코드를 출력합니다 로컬 컴퓨터의 "C : \ temp"폴더의 내용

Invoke-Command -ScriptBlock ([scriptblock]::Create((Get-Content "E:\Dashboard\Windows\winrm_scriptblock.txt"))) 

매개 변수

는 지금까지 통과 매개 변수뿐만 아니라 대답 Pass arguments to a scriptblock in powershell 커버를 간다. Keith Hill 상태로 : 스크립트 블록은 다음과 같은 파일 내용

param( $number ) $number..2 | ForEach-Object{ Write-Host "$_ lines of code in the file." } 

그리고

Invoke-Command -ScriptBlock ([scriptblock]::Create((Get-Content "E:\Dashboard\Windows\winrm_scriptblock.txt"))) -ArgumentList "99" 

당신에게

99 lines of code in the file. 
98 lines of code in the file. 
97 lines of code in the file. 
.... 
의 성가신 출력을 제공시겠습니까 명령 고려해 단지 익명 함수

입니다

+0

시도해 본 결과 나에게 도움이되지 않습니다. 내 scriptblock은 약 350 행이며 매개 변수를 허용합니다. 그게 중요한지 확실하지 않습니다. – kernelpanic

+0

필자는 매개 변수를 전달하고 작동하는지 확인합니다. 길이 자체는 전혀 중요하지 않습니다. – Matt

+0

@kernelpanic 업데이트 된 답변은 그 기반을 커버해야합니다. – Matt

5

나는 이미 답을 알고 있지만, 스크립트 파일에서 스크립트 블록을 얻을 수있는 또 다른 방법은 get-command cmdlet을 사용하는 것입니다

$sb=get-command C:\temp\add-numbers.ps1 | select -ExpandProperty ScriptBlock 

$ sb의 현재 스크립트의 스크립트 블록입니다.

+0

위의 답변이 실패하는 동안 CmdletBindings가 포함 된 독립 실행 형 ps1을로드하는 데 성공했습니다. –

-2

E : \ Dashboard \ Windows \ winrm_scriptblock.txt에서 {}을 (를) 추출해야합니다.