问题描述
我在从Project Online(服务器)打开项目文件时遇到问题。我想将所有在线文件保存在本地。如果我首先通过桌面客户端打开项目,然后尝试使用FileOpenEx函数打开该文件,则它可以工作(也许是因为它打开了草稿?) 我也尝试过完整的URL
$Project.FileOpenEx(".../pwa/_api/projectdata/Projects/$name",$true)
但是它启动了导入向导 这是代码:
$csv = Import-Csv '...\ProjectNames.csv'
$Project = New-Object -ComObject msproject.application
$csv | ForEach-Object {
$name=$_.ProjectName
Write-Output $name
$Project.FileOpenEx("<>\$name",$true)
$Save=$Project.FileSaveAs("...\Desktop\ProjectData\$name.mpp")
Get-Process | where{$_.ProcessName -like "*winproj*"} | Stop-Process
}
当我尝试打开Project Online项目时收到此错误。
ForEach-Object : Exception calling "FileOpenEx" with "2" argument(s): "The remote procedure call Failed. (Exception from HRESULT: 0x800706BE)"
At ...\MigrateProjects.ps1:26 char:8
+ $csv | ForEach-Object {
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ForEach-Object],MethodInvocationException
+ FullyQualifiedErrorId : COMException,Microsoft.PowerShell.Commands.ForEachObjectCommand
编辑:我已经将代码更改为使用注释中指出的shell,它现在打开。但是,当我尝试保存文件时,有时它不返回布尔值,而是停止。它发生在不同的项目上,但是确实保存了我列出的所有项目一次。但是,当我要重复保存过程时,它仅在FileSaveAs处退出。而且我不知道为什么。
$csv = Import-Csv '...\ProjectData\ProjectNames.csv'
$ProjServer=".../sites/pwa/"
$ProjShell = new-object -comobject wscript.shell
$ProjShell.Run("winproj /s $ProjServer",1,$false)
Start-Sleep -s 15
$Project =[System.Runtime.InteropServices.Marshal]::GetActiveObject("msproject.application")
Try{
$csv | ForEach-Object {
$name=$_.ProjectName
Write-Output $name
$NameWithoutSpaces= $name -replace '\s','_'
$Project.FileOpenEx("<>\$name",$true)
$Save= $Project.FileSaveAs("...\ProjectData\$NameWithoutSpaces.mpp")
Write-Output $Save
}
}
catch{
Get-Process | where{$_.ProcessName -like "*winproj*"} | Stop-Process
$error[0].Exception.GetBaseException().LoaderExceptions
}
Get-Process | where{$_.ProcessName -like "*winproj*"} | Stop-Process
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)