Powershell:脚本不是从命令行运行,而是从ISE运行?

Powershell:脚本不是从命令行运行,而是从ISE运行?

问题描述:

这是我在脚本中调用该函数: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

让我再说一遍,你在做什么,但有一个简单的例子:

你有一个函数,就像这样:

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