上周出现了一个奇怪的问题,无法找到解决方案。我有这个脚本的修改版本:http://technet.microsoft.com/en-us/magazine/2009.07.heyscriptingguy.aspx在500台服务器上运行我的日志备份。上周,EMEA地区的6台服务器决定不允许复制文件。Powershell无法复制现有文件
该脚本一次处理一个脚本并且正在使用copy-item cmdlet失败。该文件在远程服务器上存在。看看下面的输出:
PS C:\> BackUpAndClearEventLogsDebug.ps1 -computers bud1s001 -LogsArchive "\\srv1s001\d$\Log_Backups\Test"
+ Processing bud1s001
This is the Backupeventlogs function and we're about to copy \\bud1s001\c$\Windows\temp\bud1s001\Application.evt
This is the Copyeventlogs function and we're about to copy \\bud1s001\c$\Windows\temp\bud1s001\Application.evt
Copy-Item : Cannot find path '\\bud1s001\c$\Windows\temp\bud1s001\Application.evt' because it does not exist.
At C:\Sched\LOG_BACKUPS\BackUpAndClearEventLogsDebug.ps1:132 char:2
+ Copy-Item -path $path -dest "$LogsArchive\$folder"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (\\bud1s001\c$\W...Application.evt:String) [Copy-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
PS C:\> ls \\bud1s001\c$\Windows\temp\bud1s001\Application.evt
Directory: \\bud1s001\c$\Windows\temp\bud1s001
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/17/2014 10:17 AM 5242836 Application.evt
如果我在交互式shell中设置变量,我可以运行copy-item cmd而不会出现任何问题。如果我使用相同的参数而不是变量,我可以复制这些文件。只有在脚本中运行时才会发生故障。
我试过在不同的帐户下运行,所有这些都是管理员。我改变了-LiteralPath的-path参数。我已经添加了输出以确保该对象没有改变其值并且一切看起来都很好。失败的服务器可能具有不同的语言设置,因为它们不在美国,但该变量看起来不错。只有Windows 2003服务器有问题,而不是2008服务器的问题。
我出来的想法,开放的建议。
下面是该脚本的确切功能与调用参数
Copy-EventLogsToArchive -path $path -Folder $Folder
Function Copy-EventLogsToArchive($path, $folder)
{
Write-Host " "
write-host "This is the Copyeventlogs function and we're about to copy $path"
Copy-Item -path $path -dest "$LogsArchive\$folder"
} # end Copy-EventLogsToArchive
感谢您的帮助。在该语句中添加Test-Path之后,powershell没有看到该文件。我在函数中添加了一些dir语句,并最终注意到它所查找的文件不在那里。我增加了一个完整的60秒睡眠,现在它可以工作。在命令实际完成之前,以前的WMI BackupEventLog会返回一个返回值。复制功能会在文件存在之前或备份完成之前尝试复制该文件。为故障服务器添加了一条if语句,需要找出命令早期给出ReturnValue的原因。 – zjherner