调度powershell脚本以在目录中工作

时间:2011-08-15 16:44:29

标签: powershell automation scheduling

我有点尴尬地问这个。这似乎是一件简单的事情。从我发现并试过的所有例子来看,这应该是有效的,但显然我错过了一些东西。

我有一个非常简单的PowerShell脚本:

[IO.Directory]::SetCurrentDirectory("C:\Program Files (x86)\MyFolder")
cp .\simpleTestScript.ps1 .\sucess.ps1

我作为管理员运行:Set-ExecutionPolicy remoteSigned -scope localMachine。我正在安排脚本作为管理员,所以不应该有权限问题。我发现“cd”在powershell中并没有像预期的那样工作,但SetCurrentDirectory是一个很好的立场。但也许它仍然是一个工作目录问题。我可以使用以下行从批处理文件中运行它:

powershell.exe -File "C:\Program Files (x86)\MyFolder\simpleTestScript.ps1"

它运行完成,复制文件,生活很美好。

但是

安排相同的命令(在Win7的任务调度程序中)“成功完成”,但不复制任何文件。
将C:\ Program Files(x86)\ MyFolder \放在“start in:”字段中时没有变化。

那我在这里错过了什么?

编辑,我尝试过的其他一些事情

$scriptDir =  Split-Path $myInvocation.MyCommand.Path
cp $scriptDir\simpleTestScript.ps1 $scriptDir\sucess.ps1

相同的行为

$scriptDir = "C:\Program Files (x86)\MyFolder"
cp $scriptDir\simpleTestScript.ps1 $scriptDir\sucess.ps1

相同的行为

[IO.Directory]::SetCurrentDirectory((Convert-Path (Get-Location -PSProvider FileSystem)))
cp .\simpleTestScript.ps1 .\sucess.ps1

同样的行为。作为批处理文件运行,它的工作原理。但预定,它不会复制文件。

我还尝试安排调用powershell脚本的批处理文件,这很简单,也不行。

编辑,部分Duex
哦,是的,这可能会有所帮助。这是在Windows Server 2008 R2上。 Powershell 2.0

修改 嗯,那里的建议,包括manojlds,在windowsXP中应用它时工作正常。所以这是Server 2008的问题。

编辑结局 事实证明这是一个安全问题。我正在以管理员的身份运行,但是没有,显然当他们改变Vista中的调度程序时,他们决定添加一个“你真的有意这样做吗?”复选框。所以我很抱歉,StackOverflow特别是对你Manojlds来说,这更像是一个超级用户问题。但该死的微软是否添加了一项改变旧工具行为的新功能。你可以默认检查一下,生活会很好。 AllofMyRage
我所有的愤怒。

2 个答案:

答案 0 :(得分:1)

在脚本中使用如下所示的行来显式指定目录:

$scriptDir =  Split-Path $myInvocation.MyCommand.Path
cp $scriptDir\simpleTestScript.ps1 $scriptDir\sucess.ps1

此外,请参阅此处有关当前目录的说明:http://huddledmasses.org/powershell-power-user-tips-current-directory/

更新

我自己尝试了一项任务。当我使用.\变体时,我能够看到它失败并出现以下错误:

Copy-Item : Cannot find path 'C:\Windows\system32\test2.ps1' because it does no
t exist.
At C:\Users\manojs\Desktop\git-python\test.ps1:5 char:3
+ cp <<<<  .\test2.ps1 .\test3.ps1
    + CategoryInfo          : ObjectNotFound: (C:\Windows\system32\test2.ps1:S
   tring) [Copy-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyI
   temCommand

显然,正在查看c:\windows\system32要复制的文件。但当我将其更改为$scriptdir\表单时,它确实有效,我确实看到了正在复制的文件。

要查看为什么它没有在您的情况下执行复制,请尝试在任务中添加-noexit参数,以便您可以查看是否发生任何错误。

答案 1 :(得分:1)

填写答案只是为了没有一个未解答的问题。

事实证明这是一个安全问题。我正在以管理员的身份运行,但是没有,显然当他们改变Vista中的调度程序时,他们决定添加一个“你真的有意这样做吗?”复选框。所以我很抱歉,StackOverflow特别是对你Manojlds来说,这更像是一个超级用户问题。但该死的微软是否添加了一项改变旧工具行为的新功能。你可以默认检查一下,生活会很好。