2011-12-17 2 views
4

여기 두 가지 질문을 왜합니까 나는 스크립트를 실행할 때 인식되지 스크립트에 다음 함수 :기능을 처음 실행 한 후에야 로컬로 사용할 수있는 이유는 무엇입니까?

스크립트 :

$pathN = Select-Folder 
Write-Host "Path " $pathN 

function Select-Folder($message='Select a folder', $path = 0) { 
    $object = New-Object -comObject Shell.Application 

    $folder = $object.BrowseForFolder(0, $message, 0, $path) 
    if ($folder -ne $null) { 
     $folder.self.Path 
    } 
} 

내가 얻을 오류 :

The term 'Select-Folder' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try aga 

인치

하지만로드하고 Windows Powershell ISE에서 실행하면 처음 오류가 발생하고 기능을 "등록"하고 이후에 작동하는 것처럼 작동합니다.

그리고 절차상의 문제인 경우, 더 나은 행운을 보면서 함수를 맨 위에 나열하려고했습니다.

내가 좋아하는 단순한 기능을 시도 : 똑같은 결과/오류와

Write-host "Say " 
Hello 

function Hello { 
    Write-host "hello" 
} 

, 그것은 여전히 ​​원, 또한

.... 안녕하세요 기능 아니라고 불평 PowerShell에서 스크립트를 실행하는 모든 작업 (첫 번째 시도 후 ISE에서만 가능).

답변

12

사용하려고하기 전에 Select-Folder 함수를 선언해야합니다. 스크립트는 처음부터 끝까지 읽혀 지므로 Select-Folder을 사용하려고하면 첫 번째 단계에서 의미가 무엇인지 전혀 알 수 없습니다.

Powershell ISE에로드하면 Select-Folder이 처음 실행될 때 어떤 의미인지 알 수 있으며 2 번째로 실행하려고하면 여전히 알 수 있습니다 (따라서 오류가 발생하지 않습니다.).

그래서 당신은 당신의 코드를 변경하는 경우 : 당신이 그것을 실행할 때마다 작동합니다

function Select-Folder($message='Select a folder', $path = 0) { 
    $object = New-Object -comObject Shell.Application 

    $folder = $object.BrowseForFolder(0, $message, 0, $path) 
    if ($folder -ne $null) { 
     $folder.self.Path 
    } 
} 

$pathN = Select-Folder 
Write-Host "Path " $pathN 

.

관련 문제