脚本完成后,Powershell Remove-Item锁定文件

时间:2016-07-05 19:43:21

标签: powershell netapp

我正在创建一个基本脚本,该脚本应该访问我的NetApp,运行两个命令并将结果输出到csv文件,然后将该csv文件通过电子邮件发送给我。最后,应删除该文件。

根据我在阅读时学到的知识,不应该等到上一步完成,然后在发送后自动关闭文件?在Send-MailMessage命令之前,我仍然可以删除该文件。下一个命令是删除文件,并生成错误。如果我突出显示脚本中的每一行并手动运行它们,在命令之间等待几分钟,也会发生这种情况。到目前为止,我找到解锁文件的唯一方法是关闭Powershell。

如何强制Powershell删除此打开的文件?没有其他进程正在使用它,我收到了电子邮件,我不再对保留该文件感兴趣。我宁愿不使用第三方工具来做这件事

我尝试删除文件时收到错误。

删除命令:

If (Test-Path $attachment){
    Remove-Item $attachment -Force
}

错误:

Remove-Item : Cannot remove item C:\perfstat\NcVol.csv: The process cannot access the file 'C:\perfstat\NcVol.csv' because it is being used by another process.
At line:1 char:1
+ Remove-Item $attachment -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\perfstat\NcVol.csv:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

其他位:

$attachment = "c:\perfstat\NcVol.csv"
# Get the stats from the NetApp
Get-NcVol | Export-Csv -LiteralPath $attachment -Force -NoTypeInformation -Verbose  
Get-NcAggr | Export-Csv -LiteralPath $attachment -Force -NoTypeInformation -Verbose -Append
#Send the message
Send-MailMessage -To $emailTo -From $emailFrom -Subject $emailSubject -Body $emailBody -BodyAsHTML -Attachments $attachment -SmtpServer $emailSmtpServer
#Now delete the file

1 个答案:

答案 0 :(得分:0)

我不知道这些文件有多大,但我可能认为发送电子邮件需要一些时间。

发送邮件后尝试集成等待:

Start-Sleep -s 10

Start-Sleep -s(for seconds) <seconds>

如果有效,请告诉我。