Powershell的Start-Process命令不会在Powershell ise之外启动exe

时间:2015-04-15 13:26:42

标签: windows powershell batch-file environment-variables

我正在编写简单的脚本以将项目从Teamcenter解压缩(rar)到临时目录,然后运行特定程序(Mentor),然后再次存档。

我已经阅读了很多关于从PS开始exe的例子,但它们主要涉及记事本这样的小前锋,没有dll和其他资源。

在Powershell Ise中,脚本完美无缺。但是当我从teamcenter调用脚本时,Mentor缺少dll。

在我运行Mentor之前,在脚本中,我这样做:

Get-ChildItem Env:

检查环境变量并且存在所有变量。我尝试手动设置环境,如下所示:

$wf_classpath = Get-ChildItem Env:WF_CLASSPATH
[System.Environment]::SetEnvironmentVariable("WF_CLASSPATH", $wf_classpath.Value, "Process")

不起作用。

我试图设置homefolder:

$mentor = Start-Process $file.FullName -Wait -WorkingDirectory $workdir

不起作用。

然后我尝试用环境调用脚本中的批处理文件,但不起作用。

尝试通话cmd.exe /c ...不起作用。

这里的完整脚本,仅在Powershell Ise中运行完美,如果我从其他程序调用脚本,exe无法启动。

$shell = new-object -com shell.application
$invocation = $MyInvocation.MyCommand.Definition
$rootpath = $PSScriptRoot
$outpath = "$($PSScriptRoot)\out"
$pathtorar = "c:\Siemens\menutils\Rar.exe"

Remove-Item -Recurse -Force $outpath
New-Item $outpath -ItemType directory

$archive = get-childitem $rootpath | where { $_.extension -eq ".rar" } | Select-Object -First 1
$arglist = "x $($archive.FullName) $($outpath)"
Start-Process -FilePath $pathtorar -ArgumentList $arglist -Wait

Remove-Item -Recurse -Force $archive.FullName

$file = get-childitem $outpath -Recurse | where { $_.extension -eq ".prj" } | Select-Object -First 1
Write-Host "$(get-date -Format yyyy-MM-dd-hh-ss)
Start process: $($file.FullName)"
$mentor = Start-Process $file.FullName -Wait

$arglist = "a -m0 -r -ep1 $($archive.FullName) $($outpath)"
Start-Process -FilePath $pathtorar -ArgumentList $arglist -Wait

Remove-Item -Recurse -Force $outpath

Read-Host -Prompt "Press Enter to exit"

从Powershell Ise和其他程序运行脚本之间的区别是什么?

如何设置环境变量以从其他脚本/程序运行脚本?

1 个答案:

答案 0 :(得分:0)

可能你的当前目录不正确,而WorkingDirectory在我的经验中是错误的。如果它们不在常规系统路径上,则将从当前目录获取dll。

Start-Process

之前使用此功能
    [IO.Directory]::SetCurrentDirectory($Dir)