导致此PowerShell脚本错误的原因是什么?

时间:2015-11-24 17:02:22

标签: windows powershell scheduled-tasks powershell-v3.0

我正在编写一个PowerShell脚本,用于在Windows Server 2012 R2上注册和取消注册计划任务。我特别在这条线上遇到麻烦:

Unregister-ScheduledTask -TaskPath "\Sensei\"

(Sensei是这个项目的代号,是包含我关心的所有任务的文件夹的名称。)

当我从ISE或命令行运行该命令时,它工作正常。但是,当我从.ps1文件运行它时,它给了我一个彻头彻尾的混淆错误:

Unregister-ScheduledTask : Cannot retrieve the dynamic parameters for the cmdlet. Cannot bind argument to parameter 'TypeName' because it is null.
At Z:\server_scripts\clean.ps1:12 char:5
+     Unregister-ScheduledTask -TaskPath "\Sensei\"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Unregister-ScheduledTask], ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Unregister-ScheduledTask

尽管我可以说,TypeName不是Unregister-ScheduledTask接受的参数,因此它必须来自cmdlet内部的某个位置。

有没有人知道造成这种情况的原因是什么?

编辑:有人要求提供整个剧本。我省略了它,因为没有别的注意事项。

cd Z:\server_scripts
. .\variables.ps1

#Delete config files
    del $SENSEIPATH\assets.cfg
    del $SENSEIPATH\Web\Web.config

#Remove the virtual application
    Remove-WebApplication -Site $IISSITE -Name "c"

#Clean out the scheduled tasks
    Unregister-ScheduledTask -TaskPath "\Sensei\"

.\variables.ps1只包含一些变量定义,例如$SENSEIPATH$IISSITE。我不能在这里发布,但我保证没有什么特别的。

1 个答案:

答案 0 :(得分:-1)

所以,我不明白问题到底是什么,但是现在发生了什么。

我实际上有一个单独的脚本,未在上面列出,下载有问题的脚本,然后执行它。这是bootstrap.ps1。它看起来像这样:

Read-S3Object -BucketName $BUCKET -Folder z:\server_scripts -KeyPrefix "server_scripts/app"

Z:\server_scripts\clean.ps1

当从ISE内部运行时,它会产生上面的错误消息。

但是,如果我直接运行clean.ps1,或者在ISE之外运行bootstrap.ps1,或者我修改了bootstrap.ps1这样,它就可以了:

Read-S3Object -BucketName $BUCKET -Folder z:\server_scripts -KeyPrefix "server_scripts/app"

. Z:\server_scripts\clean.ps1

(我错过了其中一些是成功的,因为如果Unregister-ScheduledTask找不到任何未计划的任务,并且没有密切注意,它会引发不同的错误。

所以,可能存在某种范围问题,但我很长时间都在关心,并希望这件事能够发挥作用。愿这帮助别人!