我正在编写一个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
。我不能在这里发布,但我保证没有什么特别的。
答案 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
找不到任何未计划的任务,并且没有密切注意,它会引发不同的错误。
所以,可能存在某种范围问题,但我很长时间都在关心,并希望这件事能够发挥作用。愿这帮助别人!