我正在创建一个基本脚本,该脚本应该访问我的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
答案 0 :(得分:0)
我不知道这些文件有多大,但我可能认为发送电子邮件需要一些时间。
发送邮件后尝试集成等待:
Start-Sleep -s 10
Start-Sleep -s(for seconds) <seconds>
如果有效,请告诉我。