2012-01-24 21 views

cevap

2

PowerShell ile komut dosyalarını, 'PATH' ortam değişkeninde bulunan dizinlere yerleştirilirse komut olarak çalıştırabilirsiniz. Yolu ne dizinleri görmek için kullanabilirsiniz:

$env:Path -split ';'| sort 

Eğer komut yeri içerecek şekilde Windows' Sistem Özellikleri kalıcı yolunu değiştirebilir veya geçici profilinizdeki yolunu değiştirebilir veya komut dosyası. belirli durumda, yola profil dizini eklemek için profilinizde aşağıdakileri ekleyebilirsiniz:

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

Not:

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

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

Ardından sıra komutunu çalıştırabilirsiniz sekme tamamlarken, Register-TemporaryEvent.ps1 olarak tamamlayacak, ancak '.ps1' kaldırabilirsiniz ve hala çalışır.

+0

Bu hala geçerli mi? Benim PATHEXT'imde .ps1 uzantılı .PS1 dosyaları ile PATH'm içinde bir klasör var ve betiği ismiyle çağırmaya çalıştığımda, "foo" terimi, cmdlet, işlev, komut dosyası veya çalıştırılabilir program. " (fakat bir cmd isteminden çalışır) – zneak

+0

Tüm PowerShell sürümlerinde v2'den v5'e her zaman çalıştı. Powershell komut isteminde '$ env: PATH 'yazarsanız, oradaki klasörü görüyor musunuz? Belki de PATH kalıcı olarak eklenmedi veya PATH değiştirildiği için explorer.exe yeniden başlatılmadı. Ayrıca, .ps1 komut dosyasını powershell'den çağırmak için PATHEXT içinde olması gerekmez. – Rynant

2

Komut dosyasının içeriğini alabilir, bir işleve ekleyebilir ve işlevi oluşturmak için kodu çağırabilirsiniz.

$sb = Get-Content .\script.ps1 | Out-String 
Invoke-Expression "function Register-TemporaryEvent {`n $sb `n} " 
İlgili konular