使用Powershell调度命令行以调用vbscript

时间:2015-02-20 17:48:16

标签: powershell cmd scheduled-tasks wsh

我可能会让这太复杂了。其他人编写了一个PowerShell脚本来重新配置和激活W2K8服务器上的KMS,它由SCCM部署。他的剧本中的关键是:

cmd /c $env:systemroot\Sysnative\cscript.exe //Nologo .\slmgr.vbs /skms <newIPAddress> | Out-Host

它在一堆系统上不起作用,我的任务是清理。

首先,警告。由于网络安全限制,我无法远程调用服务器上的可执行文件,因此我无法使用Invoke-Command或其他。此外,服务器是W2K8,但它们只有PS 2.0。

所以我想到了编写一个脚本来创建一个运行命令的计划任务。由于2.0限制,我正在创建一个COM对象Schedule.Service,其中一个参数是Action,这是我放置可执行文件,开关和参数的地方,所有这些都将加载到Actions选项卡中预定任务。

这就是我被困住的地方。我已经在引号中尝试了很多封闭部分的组合,使用显式路径代替环境变量(尽管这意味着如果路径不同,它会在某些时候失败),依此类推。

如果我正在查看此权限,我需要“操作”选项卡执行以下操作: 1.启动PowerShell 2.让PowerShell打开命令行 3.让命令行启动cscript 4.让cscript使用适当的参数运行slmgr.vbs

不知怎的,在玩弄所有这些球时,有些东西会被丢弃。我能想出的最接近的是:

powershell.exe -nologo & 'cmd $env:systemroot\Sysnative\cscript.exe //Nologo .\slmgr.vbs /skms <newIPAddress>'

当我在“操作”选项卡中手动创建计划任务,然后运行它时,powershell启动,闪烁红色到屏幕,然后关闭,然后我才能读取它,并且任务报告回“操作已成功完成” 。只是为了测试,我也尝试过:

powershell.exe & 'cmd' "cscript slmgr.vbs"

启动PowerShell,打开DOS shell,因为它不会接受PS命令,但没有其他事情发生,并且任务报告“任务当前正在运行”

我错过了什么?

1 个答案:

答案 0 :(得分:0)

好吧,我回答了我自己的问题,是的,我让它太复杂了。

首先,忘记在PowerShell中混音。我正在使用PS来创建计划任务,但是没有必要使用它来调用cscript来启动slmgr.vbs。所以这是一个可以放下的杂耍球。

最后,当使用Schedule.Service创建任务时,关键因素是Action,这些是相关的属性设置:

$TaskService = New-Object -ComObject Schedule.Service
$TaskService.Connect($server,$user,$domain,$password)
$NewTask = $TaskService.NewTask(0)
$Action = $NewTask.Actions.Create(0)
$Action.Path = 'cmd'
$Action.Arguments = '/c cscript.exe .\slmgr.vbs /<new IP Address>'
$Action.WorkingDirectory = "%WINDIR%\System32"

您需要为$ Settings,$ Triggers和$ Principal配置属性,但这些属性更直接。