none
Скрипт не срабатывает из планировщика. Ошибок не этом нет.

    Вопрос

  • Добрый день. Я написал на C# программу, которая помимо прочего создает в планировщике задание на копирование определенных файлов из определенной директории в определенное назначение.

    Вот скрипт Copy.ps1:

    Param(
    [Parameter(Mandatory=$true)][string]$Programm,
    [Parameter(Mandatory=$true)][string]$SourcePath,
    [Parameter(Mandatory=$true)][string[]]$Comps
    )
    foreach ($comp in $Comps
    {
    $DestPath = "\\$comp\c$\ifra\$Programm\"
    schtasks /End /s $comp /TN Infra\$Programm
    Start-Sleep 3
    Remove-Item -Path $Programm\index.data
    Remove-Item -Path $Programm\offsets.db
    Start-Sleep 3
    Start-BitsTransfer -Source $SourcePath\index.data -Destination $Programm
    Start-BitsTransfer -Source $SourcePath\offsets.db -Destination $Programm
    schtasks /Run /s $comp /TN Infra\$Programm
    Start-Sleep 3
    }

    В планировщике стоит запуск powershell.exe с таким аргументом, например:

    C:\MyProgr\settings\Copy.ps1 -Prgoramm SubIndex -SourcePath C:\base\Indexer\Sub\flat.db -Comps 1st,2nd,3rd

    Принцип такой. Существует много программ, которые формируют базы для разных типов клиентов. Это унитарный копир для них. Передаю какой клиент, какая база, какие хосты нужны. - это аргументы в скрипте. Он идёт на хост тормозит там задание, которое работает с базой, удаляет старую базу, копирует новую, запускает задание.

    И вот когда я запускаю из планировщика - ничего не происходит. Т.е. он отрабатывает с кодом 0х0, мол успешно всё. А на деле - пусто. Ни перезапуска тасков, ни копирование, ничего. Но если я запускаю его из командной строки с теми же аргументами, даже просто из Run (Win+R) - powershell.exe C:\MyProgr\settings\Copy.ps1 -Prgoramm SubIndex -SourcePath C:\base\Indexer\Sub\flat.db -Comps 1st,2nd,3rd - всё отрабатывает на отлично. Из-за чего такое может быть? Таск запускает задание от имени Nt Auth/System. Пробовал от имени администратора домена - тоже ничего.

    Единственно, когда он запускает - если заставить выполнять только для пользователей вошедших в систему, а не "для всех пользователей".

    В чем проблема, подскажите.

    8 августа 2018 г. 14:44

Ответы

  • Ошибки:

    1. foreach ($comp in $Comps) - Не хватает закрывающей (
    2. $DestPath = "\\$comp\c$\ifra\$Programm\" - Переменная не используется
    3. Remove-Item -Path $Programm\index.data - Такого пути нет SubIndex\index.data 
    4. Remove-Item -Path $Programm\offsets.db - Такого пути нет SubIndex\offsets.db
    5. Start-BitsTransfer -Source $SourcePath\index.data -Destination $Programm - Такого пути тоже нет -Destination SubIndex
    6. Start-BitsTransfer -Source $SourcePath\offsets.db -Destination $Programm - Такого пути тоже нет -Destination SubIndex

    $DestPath = "\\$comp\c$\ifra\$Programm\" - Уточнить путь, с большой долей вероятности он  формируется нерпавильно.

    Исправленный скрипт:

    Param(
    	[Parameter(Mandatory=$true)][string]$Programm,
    	[Parameter(Mandatory=$true)][string]$SourcePath,
    	[Parameter(Mandatory=$true)][string]$Comps
    )
    
    $Comps = $Comps.split(",")
    
    foreach ($comp in $Comps)
    {
    	$DestPath = "\\$comp\c$\ifra\$Programm\"
    	schtasks /End /s $comp /TN Infra\$Programm
    	Start-Sleep 3
    	Remove-Item -Path $DestPath\index.data
    	Remove-Item -Path $DestPath\offsets.db
    	Start-Sleep 3
    	Copy-Item -Path $SourcePath\index.data -Destination $DestPath -Force
    	Copy-Item -Path $SourcePath\offsets.db -Destination $DestPath -Force
    	schtasks /Run /s $comp /TN Infra\$Programm
    	Start-Sleep 3
    }

    Строка в планировщике заданий, где аргументы:

    -ExecutionPolicy Bypass -File C:\MyProgr\settings\Copy.ps1 SubIndex C:\base\Indexer\Sub\flat.db 1st,2nd,3rd

    PS. Ограничение на строку с аргументами ~260 символов в Task Scheduler, поэтому особо длинные пути и имена компьютеров лучше хранить в отдельном файле параметров. 

    • Изменено KazunEditor 8 августа 2018 г. 17:05
    • Помечено в качестве ответа KazunEditor 13 августа 2018 г. 5:28
    8 августа 2018 г. 16:46
    Отвечающий