我在下面包含的脚本需要完成以下任务。它需要从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
答案 0 :(得分:1)
@MikeGaruccio那是非常尴尬的。我想我已经盯着这个脚本太久了,并没有意识到我实际上并没有将文件夹复制到$ reportServer - 这是你问的好事!这绝对重要。在将最终的$ serverName更改为实际读取$ reportServer之后,一切都很顺利。谢谢,抱歉浪费你的时间......我非常感谢你的帮助。