저는 PowerShell을 처음 사용했지만 Windows 시스템에서 많은 양의 작업을 자동화하는 것을 좋아했습니다. 나는 당신이 다른 스크립트의 함수를 호출 할 수 있다는 것을 좋아하지만, 필자가 작성한 스크립트는 사용자가 제공 할 수있는 모든 매개 변수를 사용한다. (그래서 동료가 쉽게 사용할 수있다.)Powershell이 스크립트에 필수 매개 변수가있는 경우 함수를 호출합니다.
스크립트에는 일반적으로 필수적인 매개 변수가 특히 있습니다. 내가 직면하고있는 문제는 스크립트에서 필수 매개 변수를 사용하여 함수를 호출하는 것입니다. 당신이 -VirtualMachine "VMnameHere" -Attempts 123
를 제공 할 스크립트로이 실행
Param(
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$VirtualMachine=$(throw "Machine name missing!"),
[int]$Attempts = 150
)
Function DoSomething($VirtualMachine, $Attempts){
write("$VirtualMachine and $Attempts")
}
:
다음은 간단한 예입니다. 이것을 실행하면 VMnameHere and 123
가 생성됩니다. 완전한! 여기
예 .. 다른 스크립트에서 함수로이 호출하려고하면 그러나 .. : 필드가 있기 때문에
Machine name missing!
At C:\Users\something\Desktop\Dump\play\Manage-Machine.ps1:33 char:28
+ [string]$VirtualMachine=$(throw "Machine name missing!"),
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Machine name missing!:String) [], RuntimeException
+ FullyQualifiedErrorId : Machine name missing!
분명히 :
. ".\Manage-Machine.ps1"
DoSomething -VirtualMachine "nwb-thisisamachine" -Attempts 500
이
오류가 발생 필수. 이 경우에 함수를 호출하는 방식이 잘못 되었습니까? 매개 변수에 대한 유효성 검사를 제거하면 모든 매개 변수가 작동하기 때문에 함수가 속한 스크립트에 필수 매개 변수가있는 경우 함수를 호출하는 다른 방법이 있습니까?일부 입력을 환영합니다.
감사합니다.
ps1 파일에 함수를 호출하는 행이 있습니까? 귀하의 견본이 산출물을 생성해서는 안되기 때문입니다. 그럴 경우 ps1을 호출하고 인수를 제공하십시오. – Matt
'[parameter (Mandatory = $ true)]'를 사용하고'= $ (Machine name missing!)을 던져 버리십시오. ' –
@Matt 아닙니다 , 순간에, 함수를 호출하면 (필수 매개 변수없이 설명 된 것처럼) 잘 실행됩니다. 스크립트를 실행해도 문제가 없지만 하나의 스크립트에서 여러 함수를 사용한 다음 전체 스크립트를 실행하는 대신 다른 스크립트에서 각 함수를 호출 할 때마다 여러 함수를 호출하는 것이 좋습니다. 결국 어떤 함수를 호출하면 함수를 한 번에 사용할 수 없게됩니다. –