Powershell:在ForEach循环中,Copy-Item不起作用

时间:2016-12-20 15:31:20

标签: powershell

我在下面包含的脚本需要完成以下任务。它需要从AD获取服务器列表,然后遍历每个服务器名称,并获取第二个到目录中的最新文件夹,重命名它,并将其复制到另一个服务器。

当我在foreach循环中使用它时,Copy-Item命令不起作用,如下所示:

#gathering server names
$serverList = (Get-ADComputer -Filter "Name -like 'Q0*00*'" -SearchBase "OU=MPOS,OU=Prod,OU=POS,DC=N,DC=NET").name | Sort-Object | Out-File C:\Temp\MPOS\MPOSServers.txt
$serverListPath = "C:\Temp\MPOS\MPOSServers.txt"

#Retrieve a list of MPOS Print servers from text file and set to $serverNames
$serverNames = Get-Content -Path $serverListPath

#Iterate through each of the server names
foreach ($serverName in $serverNames) {

$reportServer = "a03"

Get-ChildItem "\\$($serverName)\d$\MPosLogs\Device" | 
Where { $_.PSIsContainer } | 
Sort CreationTime -Descending | 
Select -Skip 1 |
Select -First 1 |
ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("$serverName" + "_" + $_.Name) -PassThru |
    Copy-Item -Destination "\\$($serverName)\c$\temp\MPOS\Logs"

    }

}

但是,如果我在ForEach循环之外测试它,它可以正常工作,如下所示:

Get-ChildItem "\\$($serverName)\d$\MPosLogs\Device" | 
Where { $_.PSIsContainer } | 
Sort CreationTime -Descending | 
Select -Skip 1 |
Select -First 1 |
ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("$serverName" + "_" + $_.Name) -PassThru |
    Copy-Item -Destination "\\$($serverName)\c$\temp\MPOS\Logs"

}

关于为什么它不能在完整脚本中工作的任何想法?我在测试时没有改变任何东西,我只是运行上面的命令,而不是在ForEach循环中。除文件夹副本外,它正在完成其余任务。文件夹副本仅在我在单个服务器上的ForEach循环之外进行测试时才有效。

当我说"它没有工作时,没有错误或类似的东西。它只是没有复制文件夹。

谢谢! :) LG

1 个答案:

答案 0 :(得分:1)

@MikeGaruccio那是非常尴尬的。我想我已经盯着这个脚本太久了,并没有意识到我实际上并没有将文件夹复制到$ reportServer - 这是你问的好事!这绝对重要。在将最终的$ serverName更改为实际读取$ reportServer之后,一切都很顺利。谢谢,抱歉浪费你的时间......我非常感谢你的帮助。