我有一个batch file,从serverA到serverB做一个robocoy,它工作得很好。
我有一个服务器名称列表。 我想将这个列表加载到一个powershell数组中,然后枚举这个数组,然后使用path运行这个robocopy。
这是我工作的robocopybatch file:
ROBOCOPY C:\Websites\ \\serverB\C$\Websites\ /MIR
我想要做的是用数组中的值replace“serverB”。 我从来没有真正使用PowerShell之前,所以我甚至不知道从哪里开始,除了在机器上安装PowerShell;)
理论上,这是我想要的(psudo-code):
$serverNames = ("serverA","serverB", "serverC") foreach ($server in $serverNames ) { "ROBOCOPY C:\Websites\ \\" + $server + "\C$\Websites\ /MIR" }
我想,问题是,如何执行什么通常是从PowerShell的批处理命令?
谢谢你的帮助!
$serverNames = ("serverA","serverB", "serverC") foreach ($server in $serverNames ) { ROBOCOPY.exe C:\Websites\ \\$server\C$\Websites\ /MIR }
确保Robocopy在path中。 请记住,当前的工作不是PS中的path的一部分,因此如果robocopy在当前工作目录中,请使用。\(。\ Robocopy.exe …)作为前缀。 对于可执行文件,您需要在文件名上指定.exe文件。
如果你的服务器列表不是太长,你也可以把它列出来(这个假定robocopy在当前工作目录中):
("serverA","serverB", "serverC") | %{.\Robocopy.exe C:\Websites\ \\$_\Websites\ /MIR}
EBGreen的答案是正确的。 但是,如果你只想执行一个string,你可以
Invoke-Expression“ROBOCOPY C:\ Websites \\”+ $ server +“\ C $ \ Websites \ / MIR”
要么
&“ROBOCOPY C:\ Websites \ \”+ $ server +“\ C $ \ Websites \ / MIR”
要么
cmd / c“ROBOCOPY C:\ Websites \ \”+ $ server +“\ C $ \ Websites \ / MIR”
@EBGreen,
我没有足够的评论我猜。 我不知道从stackoverflow发生了什么事…我从stackfaultstore开始,超过100点,然后他们下降到11左右。
我没有访问v1,但在v2中至less:PS> get-alias设置
CommandType名称定义———– —- ———- Alias Set Set-Variable