2009-07-14 3 views

답변

6

다른 해결책은 특정 질문에 대한 더 나은 답변입니다. 즉, 전역 변수를 생성 할 수있는 가장 일반적인 방법을 배우는 것이 좋다 말했다 톤 대한 추가 정보를 원하시면

# inner scope 
Set-Variable -name DynFEx -value 'function DynF() {"Hello DynF"}' -scope global 

# somewhere other scope 
Invoke-Expression $dynfex 
DynF 

읽기 '도움말 about_Scopes'.

8

범위를 지정할 수 global 키워드 기능 :

function global:DynF {...} 
+0

위의 코드에서 'function global : DynF {...}'가 더 적합 할 것입니다. ;-). –

+0

수정 해 주셔서 감사합니다! 스레드를 편집합니다. –

13

또 다른 옵션은 Set-Item -Path function:global:ChildFunction -Value {...}

Set-Item를 사용하여, 당신은 가치에 문자열 또는 스크립트 블록 중 하나를 전달할 수 있습니다 사용하는 것 함수 정의.

+1

_script block_을'-Value'로 넘기는 것은 효과적입니다. 그러나 _string_를 전달하는 것은 의도 한대로 작동하지 않습니다 :'Set-Item'이 그것을 받아 들일 때, 함수를 호출하면 중괄호를 제거한 정의 문자열 만 _echoes_합니다. '&'로 해결할 수 있지만 어색하고 부작용이 있는지 확실하지 않습니다 (예 :'set-item function : foo "& { 'arg 0 :'+'$ args [0]}). '@args "; foo 'hi'' - 함수 본문을 문자열로 작성해야하는 경우에는'Invoke-Expression'을 사용하는 것이 좋습니다. – mklement0

관련 문제