2012-01-24 63 views

回答

2

使用PowerShell,如果將腳本放置在'PATH'環境變量中包含的目錄中,可以將它們作爲命令執行。要看到的是在Path哪些目錄,你可以使用:

$env:Path -split ';'| sort 

你可以從Windows的系統屬性永久修改路徑,包括腳本的位置,或者你可以暫時從您的個人資料中修改路徑或腳本。在您的特定情況下,您可以添加以下到您的個人資料的配置文件目錄添加到路徑:

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

注:

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

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

然後,您可以爲運行該命令時選項卡完成,它將完成爲Register-TemporaryEvent.ps1,但您可以刪除'.ps1',它仍然可以工作。

+0

這是真的嗎?我在PATH中有一個文件夾,其中包含.ps1文件,PATHEXT中的.ps1擴展名,當我嘗試通過名稱調用腳本時,我得到「術語'foo'不被識別爲cmdlet,函數,腳本文件或可操作的程序。「 (但它可以從cmd提示符運行) – zneak

+0

從v2到v5的所有PowerShell版本中,它一直適用於我。如果你在powershell提示符下輸入'$ env:PATH',你會看到那個文件夾嗎?也許PATH沒有永久添加,或者由於PATH被改變,explorer.exe還沒有被重新啓動。另外,.ps1不需要在PATHEXT中從powershell調用腳本。 – Rynant

2

您可以獲取腳本文件的內容,將其包含在函數中並調用代碼來創建該函數。

$sb = Get-Content .\script.ps1 | Out-String 
Invoke-Expression "function Register-TemporaryEvent {`n $sb `n} " 
相關問題