我有 3 台 Windows 2016 服务器和一些我想自动化的日常任务。我是 PowerShell 的新手,所以我花了很多时间在 StackOverflow 和“谷歌搜索”中寻找答案。
我的任务是在远程服务器上通过 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
}