2012-01-24 13 views

Odpowiedz

2

Dzięki PowerShell można wykonywać skrypty jako polecenia, jeśli są umieszczone w katalogach zawartych w zmiennej środowiskowej "PATH". Aby zobaczyć, jakie katalogi w ścieżce, można użyć:

$env:Path -split ';'| sort 

Można zmodyfikować ścieżkę trwale z Właściwości systemu WINDOWS' obejmuje lokalizację skryptach, czy można tymczasowo zmodyfikować ścieżkę z poziomu swojego profilu lub skrypt. W danym przypadku, można dodać następujące do swojego profilu, aby dodać katalogu profilu do ścieżki:

$ScriptRoot = Split-Path $SCRIPT:MyInvocation.MyCommand.Path 

if(($env:Path -split ';') -notcontains $ScriptRoot) { 
    $env:Path += ';' + $ScriptRoot 
} 

Następnie można uruchomić komendę jako:

PS >$timer = New-Object Timers.Timer 
PS >Register-TemporaryEvent $timer Disposed { [Console]::Beep(100,100) } 

Uwaga: Gdy zakładka ukończenie, zakończy się jako Register-TemporaryEvent.ps1, ale możesz usunąć ".ps1" i nadal będzie działać.

+0

Czy to nadal prawda? Mam folder w mojej PATH z plikami .ps1 w nim, rozszerzenie .ps1 w moim PATHEXT, a kiedy próbuję wywołać skrypt po jego nazwie, otrzymuję "Termin" foo "nie jest rozpoznawany jako nazwa cmdlet, funkcja, plik skryptu lub działający program . " (ale działa z podpowiedzi cmd) – zneak

+0

To zawsze działało dla mnie we wszystkich wersjach PowerShell od wersji 2 do 5. Jeśli wpiszesz '$ env: PATH' w wierszu uprawnień, zobaczysz tam folder? Być może PATH nie została dodana na stałe lub program explorer.exe nie został ponownie uruchomiony po zmianie PATH. Ponadto, .ps1 nie musi być w PATHEXT, aby wywołać skrypt z powershell. – Rynant

2

Możesz pobrać zawartość pliku skryptu, zamknąć go w funkcji i wywołać kod w celu utworzenia funkcji.

$sb = Get-Content .\script.ps1 | Out-String 
Invoke-Expression "function Register-TemporaryEvent {`n $sb `n} " 
Powiązane problemy