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"
它什么也没做。
我也尝试用短划线和名称限定每个参数,但仍然无效。
我错过了什么?
谢谢!
让我再说一遍,你在做什么,但有一个简单的例子:
你有一个函数,就像这样:
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 0
和exit 1
?
是的,就是这样!谢谢。至于退出代码,我的印象是,为了表示成功,你在try块内部1退出,在catch中退出0。那是不正确的?他们应该在别处吗?再次感谢!! – user259286
@ user259286 - 退出码0表示成功完成。 – manojlds
哦,这只是一个偏好的事情?或者它必须是这样的? – user259286
当您从ISE运行时,您是在命令提示符下还是从顶部的编辑器窗口中运行? – JNK
从ISE我只需点击编辑器窗口中的绿色运行按钮。 – user259286
那么你正在做两件不同的事情。您将它添加到脚本中,然后尝试将它作为完全不同的命令行中的参数运行。 – JNK