2010-03-21 6 views
1

I I과 같은 두 함수를 정의하는 PS1 파일에 저장하는 스크립트가 있습니다내 PowerShell에서 함수를 등록 할 나타나지 않습니다

function Invoke-Sql([string]$query) { 
    Invoke-Sqlcmd -ServerInstance $Server -Database $DB -User $User -Password $Password -Query $query 
} 

function Get-Queued { 
    Invoke-Sql "Select * From Comment where AwaitsModeration = 1" 
} 

PowerShell을 콘솔에서 나는 다음을 입력하여 PS1 파일을 호출 (경로의 폴더에 있고 자동 완성 기능이 작동합니다.)

그러나 기능을 사용할 수 없습니다. 콘솔에 함수를 복사/붙여 넣을 때 모든 것이 잘 작동하기 때문에 혼란 스럽습니다. 또한 프로파일에 정의 된 기능이 있으며 작동합니다. 내가 잘못 생각한 곳은 왜 내가하려는 일을 제대로하지 않습니까?

답변

4

"dot source"파일이 필요합니다. 대신해야한다 (스크립트는 기능을하지만, 그 기능을 사용 아무것도가 포함 된 경우) 스크립트를 실행하지만 글로벌 상태에서 정의 된 함수와 변수를 보존하지 않습니다

PS> C:\PathTo\MyScript.ps1 

: 그 대신 말을하는 것입니다 다음을 수행하십시오 :

PS> . C:\PathTo\MyScript.ps1 

이렇게하면 나중에 사용할 수 있도록 함수를 전역 범위에 "로드"합니다.

또한 PowerShell 2.0에서 Import-Module을 사용하여 .psm1 파일의 스크립트를 "모듈"로로드하여 더 나은 재사용 및 배포 이야기를 제공 할 수 있습니다.

+0

그게 다야! – flq

관련 문제