У меня есть 3 сервера Windows 2016 и некоторые рутинные задачи, которые я хочу автоматизировать.
Я новичок в PowerShell, поэтому я потратил много времени на поиски ответов в StackOverflow и "поиск в Google".
Моя задача - сделать резервную копию некоторых файлов через 7zip на удаленном сервере.
Есть команда, которая прекрасно работает:
Invoke-Command -ComputerName 10.10.0.20 -ScriptBlock {start-Process -wait-FilePath 'C:\Program Files\7-Zip\7z.exe' -ArgumentList 'a','-t7z','C:\BlueCollar_backup\bluecollar_121.zip','C:\Services\BlueCollar' -wait}
Но мне нужно добавить дату к имени архива bluecollar_121.zip, оно должно выглядеть как bluecollar_13.08.2018.zip
Я перепробовал огромное количество вариантов, но безуспешно.
[string]$stime = get-date -f 'dd.MM.yyyy
Invoke-Command -ComputerName 10.10.0.20 -ScriptBlock {start-Process -FilePath 'C:\Program Files\7-Zip\7z.exe' -ArgumentsList 'a -t7z C:\BlueCollar_backup\bluecollar_'$stime'.zip C:\Services\BlueCollar' -wait}
Вторая попытка была:
[string]$stime = get-date -f 'dd.MM.yyyy
[string]$tmp1="C:\BlueCollar_backup\bluecollar_$stime.zip"
$command = {start-Process -FilePath 'C:\Program Files\7-Zip\7z.exe' -ArgumentsList 'a -t7z $stime C:\Services\BlueCollar' -wait}
И последняя попытка:
[string]$stime = get-date -f 'dd.MM.yyyy
$arguments = @()
$arguments += "a"
$arguments += "-t7z"
$arguments += "$tmp1"
$arguments += "C:\Services\BlueCollar"
Invoke-Command -ComputerName 10.10.0.20 -ScriptBlock {start-Process -FilePath 'C:\Program Files\7-Zip\7z.exe' -ArgumentList($arguments) -wait}
Они все не работают. Проблема в переменной $ stime.
Как поместить переменную $ stime в Invoke-Command?
UPD1:
Я решил эту проблему!
Invoke-Command -ComputerName '10.10.0.20' -ArgumentList $stime -ScriptBlock{
$stime = $args[0]
start-Process -FilePath 'C:\Program Files\7-Zip\7z.exe' "a -t7z C:\BlueCollar_backup\bluecollar_$stime.zip C:\Services\BlueCollar" -wait
}