Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft project使用powershell打开文件_Powershell_Ms Project_Comobject - Fatal编程技术网

Microsoft project使用powershell打开文件

Microsoft project使用powershell打开文件,powershell,ms-project,comobject,Powershell,Ms Project,Comobject,从project Online(服务器)打开项目文件时遇到问题。我想在本地保存所有联机文件。若我首先通过桌面客户端打开项目,并尝试使用FileOpenEx函数打开该文件,它就会工作(可能是因为它打开了草稿?) 我也尝试了完整的URL $Project.FileOpenEx(".../pwa/_api/projectdata/Projects/$name",$true) 但它启动了导入向导 代码如下: $csv = Import-Csv '...\ProjectNames.

从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
}
编辑:我已经将代码更改为使用类似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
$csv=Import csv'..\ProjectData\ProjectNames.csv'
$ProjServer=“…/sites/pwa/”
$ProjShell=新对象-comobject wscript.shell
$ProjShell.Run(“winproj/s$ProjServer”,1,$false)
开始睡眠-s15
$Project=[System.Runtime.InteropServices.Marshall]::GetActiveObject(“msproject.application”)
试一试{
$csv | ForEach对象{
$name=$\项目名称
写入输出$name
$NameWithoutSpaces=$name-替换'\s','\ux'
$Project.FileOpenEx(\$name,$true)
$Save=$Project.FileSaveAs(“…\ProjectData\$NameWithoutSpaces.mpp”)
写入输出$Save
}
}
抓住{
获取进程|其中{$\进程名-类似“*winproj*”}|停止进程
$error[0]。异常。GetBaseException().LoaderExceptions
}
获取进程|其中{$\进程名-类似“*winproj*”}|停止进程

为了自动化MS Project并将其打开到Project server,您需要使用命令行开关启动winproj.exe。有关如何使用VBScript完成此操作的信息,请参见;根据需要进行修改以使用PowerShell。@RachelHettinger感谢它的工作。但现在我在储蓄方面又遇到了另一个问题。我已经编辑了我的问题。错误是:无法获得FieleSaveas的调度ID(错误:0x800 10001)。在重复Sub AS进程之前,请考虑删除文件,然后再次尝试保存到现有文件的路径和名称。在每次尝试之前,我手动删除文件。所以这不是问题所在。有效的方法是将启动睡眠放在文件保存之前,因为我认为它在开始保存之前不会完全打开。也许有更正确的方法可以做到这一点?是的,在“另存为”命令运行之前,文件很可能没有完全打开,因此暂停(睡眠)是一种很好的处理方法。为了自动化MS Project并将其打开到Project server,您需要使用命令行开关启动winproj.exe。有关如何使用VBScript完成此操作的信息,请参见;根据需要进行修改以使用PowerShell。@RachelHettinger感谢它的工作。但现在我在储蓄方面又遇到了另一个问题。我已经编辑了我的问题。错误是:无法获得FieleSaveas的调度ID(错误:0x800 10001)。在重复Sub AS进程之前,请考虑删除文件,然后再次尝试保存到现有文件的路径和名称。在每次尝试之前,我手动删除文件。所以这不是问题所在。有效的方法是将启动睡眠放在文件保存之前,因为我认为它在开始保存之前不会完全打开。也许有更正确的方法可以做到这一点?是的,在“另存为”命令运行之前,文件很可能没有完全打开,因此暂停(睡眠)是一种很好的处理方法。
$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