#powershell #scheduled-tasks
Вопрос:
Я создаю запланированную задачу, которая создает резервные копии в сетевом расположении и создает папку на основе даты и времени ее создания. Это должно происходить на нескольких компьютерах, поэтому я создал сценарий, который делает это, и настроил его на запуск при запуске, чтобы запланированная задача была добавлена на всех компьютерах
Ниже приведена часть текущего сценария с удаленной конфиденциальной информацией.
$L_V_1_String_TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "Copy-Item -Path C:testfolder -Destination "\FileServerU_Backup$ENV:ComputerNameU_C-D$((Get-Date).ToString('yyyyMMdd'))T$((Get-Date).ToString('HHmm'))I$env:USERNAME" -Recurse -Force"
$L_V_1_String_TaskPrincipal = New-ScheduledTaskPrincipal -UserId "domainusername" -RunLevel Highest
$L_V_1_String_TaskTrigger = New-ScheduledTaskTrigger -Daily -At 4AM
$L_V_1_String_TaskSetting = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -MultipleInstances IgnoreNew
$L_V_1_String_NewTask = New-ScheduledTask -Action $L_V_1_String_TaskAction -Trigger $L_V_1_String_TaskTrigger -Settings $L_V_1_String_TaskSetting -Description "This scheduled task backs up daily at 04:00." -Principal $L_V_1_String_TaskPrincipal
Register-ScheduledTask BackupContentinC -InputObject $L_V_1_String_NewTask
Но когда я открываю Планировщик задач и открываю Задачу, действие меняется на следующее
Add arguments (optional): Copy-Item -Path C:testfolder -Destination \FileServerU_BackupDesktop-1U_C-D20210712T1245IAasim' -Recurse -Force
Это нормально для одноразового запуска, но я хочу, чтобы он создавал новые папки каждый день, вместо того, чтобы сохранять все в одной папке.
Есть ли какой-либо способ отправить $L_V_1_String_TaskAction в виде текста или строки вместо того, чтобы сначала разрешить PowerShell обрабатывать или преобразовывать переменные?
заранее спасибо.
Комментарии:
1. Аргументы должны быть четкими. Планировщик задач использует синтаксис CMD для запуска команд, поэтому любые переменные, объявленные с использованием синтаксиса PowerShell , например
$ENV:ComputerName
, не будут поняты CMD. Подумайте о том, чтобы вместо этого использовать скрипт PS1.2. Ладно, понял. Поэтому мне нужно создать сценарий PS1 с помощью команды вместо того, чтобы передавать ее из запланированной задачи PowerShell
3. Не уверен, как вы передадите команду… Вы можете обновить сообщение?
4. Я запускаю скрипт ps1, который настраивает запланированные задачи на всех ПК при запуске… по большей части все работает нормально, даже в приведенном выше случае создается запланированная задача. но взгляните на эту конкретную часть сценария
\FileServerU_Backup$ENV:ComputerNameU_C-D$((Get-Date).ToString('yyyyMMdd'))T$((Get-Date).ToString('HHmm'))I$env:USERNAME
, Это то, что я хотел бы отправить в виде строки вместо того, чтобы PowerShell выполнял свои функции с этими переменными и изменял их, смысл этого в том, чтобы создавать имена папок в соответствии с датой и временем запуска запланированной задачи.5. Проблема в том, что вы указываете формат даты, используя неправильный синтаксис. Это параметр командлета, а не метод, к которому можно получить доступ, как только вывод будет строкой. Попробуйте это:
\FileServerU_Backup$ENV:ComputerNameU_C-D$(Get-Date -Format "yyyyMMdd")T$(Get-Date -Format "HHmm")I$env:USERNAME