我有一个批处理文件,它可以从服务器 A 到服务器 B 执行机器人操作,并且运行良好。
我有一份服务器名称列表。我想将此列表加载到 powershell 数组中,然后枚举此数组并使用该路径运行 robocopy。
这是我正在使用的 robocopy 批处理文件:
ROBOCOPY C:\Websites\ \\serverB\C$\Websites\ /MIR
我想做的是用数组中的值替换“serverB”。我以前从未真正使用过 powershell,所以除了在机器上安装 powershell 之外,我甚至不知道从哪里开始 ;)
理论上,这就是我想要的(伪代码):
$serverNames = ("serverA","serverB", "serverC")
foreach ($server in $serverNames )
{
"ROBOCOPY C:\Websites\ \\" + $server + "\C$\Websites\ /MIR"
}
我想,问题是,如何在 powershell 中执行通常是批处理命令?
谢谢你的帮助!
答案1
$serverNames = ("serverA","serverB", "serverC")
foreach ($server in $serverNames )
{
ROBOCOPY.exe C:\Websites\ \\$server\C$\Websites\ /MIR
}
确保 Robocopy 在路径中。请记住,当前工作不是 PS 中路径的一部分,因此如果 robocopy 在当前工作目录中,请在其前面添加 .\ (.\Robocopy.exe...)。对于可执行文件,您需要在文件名上指定 .exe。
如果您的服务器列表不太长,您也可以将其放在一行中(假设 robocopy 位于当前工作目录中):
("serverA","serverB", "serverC") | %{.\Robocopy.exe C:\Websites\ \\$_\Websites\ /MIR}
答案2
EBGreen 的答案是正确的。但是,如果你只想执行一个字符串,你可以
调用表达式“ROBOCOPY C:\Websites\ \”+$server +“\C$\Websites\ /MIR”
或者
& "ROBOCOPY C:\Websites\ \" + $server + "\C$\Websites\ /MIR"
或者
cmd /c “ROBOCOPY C:\Websites\ \” + $server + “\C$\Websites\ /MIR”
答案3
@EBGreen,
我猜我没有足够的积分来评论。我不知道我从 stackoverflow 获得的积分怎么了... 我开始在 serverfault 上获得超过 100 个来自 stack 的积分,然后就降到了 11 个左右。
我无法访问 v1,但至少可以访问 v2:PS>get-alias set
CommandType 名称 定义 ----------- ---- ---------- 别名 set Set-Variable