Отправка команды без ее выполнения или обработки в Powershell

#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