如何使用 UNC 路径将文件复制到网络资源

如何使用 UNC 路径将文件复制到网络资源

我正在尝试做一些非常简单的事情,从概念上讲它应该可以工作,但似乎不行,我也不知道为什么。我有一个文件需要复制到多个服务器上的多个文件夹中。我整个上午都在寻找和尝试不同的解决方案。以下是我认为应该可行的方法:

$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使用用户名/密码,这样您就不会以纯文本形式编写它们。

相关内容