@LucD Thank You veeeeeery much. You're the Hero :)
Here my final script for alll vms
$vmNames = get-vm | Where-Object { $_.Name -like '*'}
foreach($vmName in $vmnames)
{
$retentionDays = 7
$startTask = '12/06/2024 00:01:00'
$emailAddr = 'email@domain.com'
$vm = Get-VM -Name $vmName
$spec = New-Object VMware.Vim.ScheduledTaskSpec
$spec.Scheduler = New-Object VMware.Vim.DailyTaskScheduler
$spec.Scheduler.ActiveTime = [System.DateTime]::Parse($startTask)
$spec.Scheduler.Hour = 10
$spec.Scheduler.Minute = 10
$spec.Scheduler.Interval = 1
$spec.Notification = $emailAddr
$spec.Name = "$vmName - Delete snapshots older than $retentionDays days"
$spec.Action = New-Object VMware.Vim.MethodAction
$arg1 = New-Object VMware.Vim.MethodActionArgument
$spec.Action.Argument += $arg1
$arg2 = New-Object VMware.Vim.MethodActionArgument
$arg2.Value = New-Object VMware.Vim.SnapshotSelectionSpec
$arg2.Value.RetentionDays = $retentionDays
$spec.Action.Argument += $arg2
$spec.Action.Name = 'RemoveAllSnapshots_Task'
$spec.Description = "Create scheduled task on $vmName to delete snapshots older than $retentionDays days"
$spec.Enabled = $true
$schedTaskMgr = Get-View ScheduledTaskManager
$schedTaskMgr.CreateScheduledTask($vm.ExtensionData.MoRef, $spec)
}
If you want to create for specific group of virtual machines, you can use
$vmNames = get-vm | Where-Object { $_.Name -like 'VMname*'}
Here is the result

