Планирование сценария powershell для работы в каталоге - PullRequest
0 голосов
/ 15 августа 2011

Я немного смущен, чтобы спросить это.Кажется, такая простая вещь.И из всех примеров, которые я нашел и попробовал, это должно работать, но, видимо, я что-то упускаю.

У меня есть очень простой скрипт powershell:

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

I 'запускаем от имени администратора: 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: "field.

Так чего мне здесь не хватает?

Редактировать, некоторые другие вещи, которые я пробовал

$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

Edit хммммм, совет там, включая manojlds, прекрасно работает при применении его в windowsXP.Так что это проблема Server 2008.

Редактировать финал Получается, что это проблема безопасности.Я работаю как администратор, чтобы сделать это, но нет, видимо, когда они изменили планировщик в Vista, они решили добавить: «Вы действительно хотели это сделать?»флажок.Прошу прощения, StackOverflow и особенно вам, Manojlds, это оказалось скорее проблемой для суперпользователя.Но, черт побери, Microsoft за добавление новой функции, которая изменила поведение старого инструмента.Вы могли бы проверить это по умолчанию, и жизнь была бы хорошей.AllofMyRage
Вся моя ярость.

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Заполнение ответа только для того, чтобы не осталось вопросов без ответа.

Так что, оказывается, это проблема безопасностиЯ работаю как администратор, чтобы сделать это, но нет, видимо, когда они изменили планировщик в Vista, они решили добавить: «Вы действительно хотели это сделать?»флажок.Прошу прощения, StackOverflow и особенно вам, Manojlds, это оказалось скорее проблемой для суперпользователя.Но, черт побери, Microsoft за добавление новой функции, которая изменила поведение старого инструмента.Вы могли бы проверить это по умолчанию, и жизнь была бы хорошей.

1 голос
/ 15 августа 2011

Используйте строки, подобные приведенным ниже в вашем скрипте, чтобы явно указать каталог:

$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 взадача, чтобы вы могли увидеть, если происходит какая-либо ошибка.

...