2011-09-02 114 views
2

這是我在腳本中調用該函數:Powershell:腳本不是從命令行運行,而是從ISE運行?

Function SetUp-ScheduledTasks 
{ 
param 
(
    [string]$Server = "", 
    [string]$TaskName = "", 
    [string]$ReleasePath = "", 
    [string]$User = "", 
    [string]$Pwd = "" 
) 

try 
{ 
    Set-ExecutionPolicy RemoteSigned 

    Remove-ScheduledTask -ComputerName $Server -TaskName $TaskName Get-ScheduledTask 
    Create-ScheduledTask -ComputerName $Server -TaskName $TaskName -TaskRun $ReleasePath -Schedule "DAILY" -StartTime "02:00:00" -RunAsUser $User -RunAsPwd $Pwd 

    exit 1 
} 
catch 
{   
    exit 0 
} 

} 

當我把這個在腳本文件,但任何功能外Powershell_ISE內,它完美的作品,這是我該做的:SetUp-ScheduledTasks "myserver" "MyTask1" "c:\release" "theuser" "thepassword"

但是,當我從PS命令行調用它像這樣: . .\ScheduledTasks.ps1 SetUp-ScheduledTasks "myserver" "MyTask1" "c:\release" "theuser" "thepassword"它什麼也沒做。

我也嘗試用短劃線和名稱限定每個參數,但仍然無效。

我錯過了什麼?

謝謝!

+0

當您從ISE運行時,您是在命令提示符下還是從頂部的編輯器窗口中運行? – JNK

+0

從ISE我只需點擊編輯器窗口中的綠色運行按鈕。 – user259286

+0

那麼你正在做兩件不同的事情。您將它添加到腳本中,然後嘗試將它作爲完全不同的命令行中的參數運行。 – JNK

回答

6

讓我再說一遍,你在做什麼,但有一個簡單的例子:

你有一個函數,就像這樣:

function a{ 
write-host "this is function a" 
} 

比方說,你保存在test.ps1

現在,要在ISE中進行測試,請在test.ps1中執行以下操作:

function a{ 
write-host "this is function a" 
} 

a 

並按運行按鈕,你會得到預期的輸出,在這種情況下this is function a

現在,您使用原始test.ps1無底線(一),並從控制檯調用它像這樣:

. .\test.ps1 a

它並沒有給出輸出。爲什麼? a,預期的函數調用正在作爲參數傳遞給腳本,函數a未被調用。

你必須這樣做:

. .\test.ps1; a

PS:你是不是在錯誤的地方使用exit 0exit 1

+0

是的,就是這樣!謝謝。至於退出代碼,我的印象是,爲了表示成功,你在try塊內部1退出,在catch中退出0。那是不正確的?他們應該在別處嗎?再次感謝!! – user259286

+0

@ user259286 - 退出碼0表示成功完成。 – manojlds

+0

哦,這只是一個偏好的事情?或者它必須是這樣的? – user259286