2015-05-14 5 views
1

Я запускаю сценарий для копирования файла из локального в сетевое. Сценарий работает, если я сам его назову через powershell, но не из Task Scheduler. Я просмотрел this и многие другие статьи, но я не могу заставить его работать. Сейчас я могу посмотреть планировщик задач «Последний результат выполнения», и он говорит, что задача выполняется в течение пары минут, прежде чем я ее остановлю. Когда я заканчиваю задачу, я даже не получаю исключение (код находится в try/catch)Скрипт Powershell для копирования файла в сеть запускается вручную, но не из планировщика заданий

У меня есть ServerLocation и ServerFullPath, потому что я пытался попробовать несколько разных примеров.

Код выглядит следующим образом (с домена/имя пользователя/пароль подмененной):

Set-Variable ServerCredentials -option Constant -value "<domain>/<username> <password>" 
Set-Variable ServerLocation -option Constant -value "\\<domain>" 
Set-Variable ServerFullPath -option Constant -value $ServerLocation"\path\path" 

$latest = Get-ChildItem -Path .\ | Sort-Object LastWriteTime -Descending | Select-Object -First 1 
net use $ServerFullPath /user:$ServerCredentials 

Copy-Item .\$latest $ServerFullPath -Force 

Я новичок в PowerShell, любые мысли о том, как устранять неполадки? Нужна дополнительная информация?

+0

Работает ли ваш скрипт вне планировщика задач? – Luke

+0

Да, я могу просто запустить сценарий из powershell. Я поставил это в названии, но я вижу, что это было немного неясным. Теперь вы можете редактировать текст. –

+0

Извините, я пропустил это, и вы используете .bat-файл, чтобы запустить powershell в TaskScheduler? – Luke

ответ

0

Ответ на этот вопрос заключается в том, как работает «сетевое использование». Набрав «net use» в cmd, я показал, что у меня уже есть соединение, и похоже, что у него есть соединение, которое попросит использовать сетевое использование, поэтому мне показалось, что мой скрипт висит. Я попытался удалить соединение с «Net use */delete/y», чуть выше исходного сетевого использования, и это позволило скрипту продолжить работу правильно. Затем он выглядел:

Net use * /delete /y 
net use $ServerFullPath /user:$ServerCredentialUser $ServerCredentialPassword 

Ключевым моментом здесь является \ у на конце, который будет молча ответить утвердительно на запрос.

В качестве ссылки this link показано, как использовать параметр/delete. Я решил использовать здесь *, но, похоже, я мог удалить это конкретное соединение.

Однако это вызвало то, что может быть чистое использование подсказывал мне каким-то образом о связи, которая уже была там, поэтому я изменил оригинальную строку:

net use $ServerFullPath /user:$ServerCredentialUser $ServerCredentialPassword /y 

С/у на конце она работает просто хорошо, и все хорошо :)