我正在尝试做一些非常简单的事情,从概念上讲它应该可以工作,但似乎不行,我也不知道为什么。我有一个文件需要复制到多个服务器上的多个文件夹中。我整个上午都在寻找和尝试不同的解决方案。以下是我认为应该可行的方法:
$servers = @("\\server1.domain.com","\\server2.domain.com","\\server3.domain.com","\\server4.domain.com")
$dests = @("\E$\path1","\E$\path2","\E$\path3","\E$\path4","\E$\path5")
$file = "C:\Users\user\file.txt"
foreach ($server in $servers)
{net use $server /USER:domain\username password
{foreach ($dest in $dests)
{copy-item -Path $file -Destination $server$dest}}}
其逻辑是,它将执行第一个 foreach,获取第一个服务器名称,执行 net use 以在计算机上缓存我的凭据,执行第二个 foreach,获取第一个路径,然后将文件复制到第一个服务器上的第一个路径,然后将文件复制到第一个服务器上的第二个路径,等等。在路径的末尾,它将返回到第一个 foreach,移动到第二个服务器,并浏览第二个服务器上的路径列表,依此类推。
我在其他地方看到过类似的帖子,他们没有使用第二个 foreach,但我尝试过,但没有用,如下所示:
foreach ($server in $servers)
{net use $server /USER:domain\username password
{copy-item -Path $file -Destination $server$dest}}}
谢谢大家在这方面给予我的帮助。我确信这只是我所忽略的一个非常简单的问题。
答案1
使用网络资源文件系统和 UNC 路径时,应filesystem::
在 Powershell 中使用 PSProvider。以下是几个示例:
Test-Path "filesystem::\\127.0.0.1\c$"
Test-Path "filesystem::\\$env:computername\c$"
将此过程适配到您的代码应该很简单:
foreach ($server in $servers){
net use $server /USER:domain\username password
foreach ($dest in $dests){
copy-item -Path $file -Destination "filesystem::$server$dest"
}#End foreach ($dest in $dests)
}#End foreach ($server in $servers)
请记住,作为 powershell 专业人士,您的代码应尽可能易于阅读。与所有专业写作一样,风格很重要。
此外,您应该考虑Get-Credential
使用用户名/密码,这样您就不会以纯文本形式编写它们。