반응형
인수가 있는 함수에서 Invoke-Command-ScriptBlock 사용
원격 호스트에서 Invoke-Command와 해당 명령을 사용하여 명령을 실행하는 PowerShell 스크립트를 작성하고 있습니다.-ScriptBlock
매개 변수예를들면,
function Foo {
...
return "foo"
}
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo}
이것은 잘 작동합니다.제가 지금 하고 싶은 것은 같은 것이지만, 로컬 인수가 있는 함수를 호출합니다.예를들면,
function Bar {
param( [String] $a, [Int] $b )
...
return "foo"
}
[String] $x = "abc"
[Int] $y = 123
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo($x,$y)}
하지만 이것은 작동하지 않습니다.
Invoke-Command : 'ScriptBlock' 매개 변수에 대한 인수의 유효성을 검사할 수 없습니다.인수가 null입니다.null이 아닌 인수를 제공하고 명령을 다시 시도하십시오.
Invoke-Command를 사용하여-ScriptBlock
그것이 인수가 있는 로컬 함수입니까?
저는 제가 전체 함수와 매개변수를 큰 코드 블록으로 감쌀 수 있다는 것을 알고 있지만, 제 생각에 그것은 깨끗한 방법이 아닙니다.
당신은 원하는 것 같아요:
function Foo ( $a,$b) {
$a
$b
return "foo"
}
$x = "abc"
$y= 123
Invoke-Command -Credential $c -ComputerName $fqdn -ScriptBlock ${function:Foo} -ArgumentList $x,$y
블록으로 함수를 래핑하고 블록을 통과할 수 있습니다.
$a = {
function foo{}
foo($args)
}
$a.invoke() // Locally
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock $a //remotely
우아하지는 않지만요.
이 기능은 다음과 같습니다.
function foo
{
param([string]$hosts, [string]$commands)
$scriptblock = $executioncontext.invokecommand.NewScriptBlock($commands)
$hosts.split(",") |% { Invoke-Command -Credential $cred -ComputerName $_.trim() -Scriptblock $scriptblock }
}
$Log = "PowerShellCore/Operational"
Invoke-Command -ComputerName Server01 -ScriptBlock {Get-WinEvent -LogName $Using:Log -MaxEvents 10}\
언급URL : https://stackoverflow.com/questions/8448808/using-invoke-command-scriptblock-on-a-function-with-arguments
반응형
'code' 카테고리의 다른 글
Hibernate가 LONG over CLOB를 사용하도록 전환된 이유는 무엇입니까? (0) | 2023.08.26 |
---|---|
잘못된 오류: 리소스를 로드하지 못했습니다. net:ERR_CACH_MISS (0) | 2023.08.26 |
Ansible MariaDB 10.1.47 암호가 강제되지 않음 (0) | 2023.08.26 |
기본적으로 int가 아닌 정수 리터럴 유형? (0) | 2023.08.26 |
Python에서 목록을 "멋지게" 인쇄하는 방법 (0) | 2023.08.26 |