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

时间:2011-09-02 17:42:37

标签: powershell

这是我在脚本中调用的函数:

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"它没有做任何事情。

我还尝试用破折号和名称限定每个参数,但这仍然不起作用。

我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分: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

现在,你使用没有底线(a)的原始test.ps1,并从控制台调用它:

. .\test.ps1 a

并没有给出输出。为什么? a,目标函数调用作为参数传递给脚本,而函数a不会被调用。

你必须这样做:

. .\test.ps1; a

PS:你是不是在错误的地方使用exit 0exit 1