这是我在脚本中调用的函数:
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 :(得分: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 0
和exit 1
?