Powershell 阵列 robocopy

Powershell 阵列 robocopy

我有一个批处理文件,它可以从服务器 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

相关内容