使用powershell脚本编译oracle表单

时间:2014-02-19 10:54:38

标签: powershell oracleforms

我在一个文件夹中有很多oracle表单,我想在powershell脚本中通过frmcmp命令编译这些表单。

我写了一个跟随

的powershell脚本
 $module="module="   
    get-childitem "C:\forms\fortest" -recurse | 
        where { $_.extension -eq ".fmb" } | 
        foreach {
            C:\Oracle\Middleware\Oracle_FRHome1\BIN\frmcmp $module $_.FullName userid=xyz/xyz@xyz Output_File=C:\forms\11\common\fmx\$_.BaseName+'.fmx'
        }

但是这个不起作用。我是powershell的新手。

但是当我尝试通过命令提示符编译单个表单时,其工作方式如下。

frmcmp module=C:\forms\src\xyz.fmb userid=xyz/xyz@xyz Output_File=C:\forms\11\common\fmx\xyz.fmx

1 个答案:

答案 0 :(得分:2)

如果要在PowerShell中的字符串中使用变量,则可以使用不同的选项。首先,如果您想在字符串中使用变量,则始终需要使用"而不是'来包装字符串。

$myVariable = "MyPropertyValue"
Write-Host "The variable has the value $MyVariable"

上面的代码会产生输出:

The variable has the value MyPropertyValue

如果要使用变量(或任何表达式)的属性并将其插入到字符串中,则需要将其包装在带有$(expression goes here)的字符串中,例如

$MyVariable = New-Object PSObject -Property @{ MyPropertyName = 'MyPropertyValue' }

# The following will fail getting the property since it will only consider 
# the variable name as code, not the dot or the property name. It will 
# therefore ToString the object and append the literal string .MyPropertyName
Write-Host "Failed property value retrieval: $MyVariable.MyPropertyName"

# This will succeed, since it's wrapped as code.
Write-Host "Successful property value retrieval: $($MyVariable.MyPropertyName)"

# You can have any code in those wrappers, for example math.
Write-Host "Maths calculating: 3 * 27 = $( 3 * 27 )"

以上代码将产生以下输出:

Failed property value retrieval: @{MyPropertyName=MyPropertyValue}.MyPropertyName
Successful property value retrieval: MyPropertyValue
Maths calculating: 3 * 27 = 81

我在PowerShell中启动进程时通常会尝试使用Start-Process cmdlet,因为它使我可以对启动的进程进行额外的控制。这意味着您可以使用类似于以下内容的内容。

Get-ChildItem "C:\forms\fortest" -Filter "*.fmb" -recurse | Foreach {
    $FormPath = $_.FullName
    $ResultingFileName = $_.BaseName
    Start-Process -FilePath "C:\Oracle\Middleware\Oracle_FRHome1\BIN\frmcmp.exe" -ArgumentList "module=$FormPath", "userid=xyz/xyz@xyz", "Output_File=C:\forms\11\common\fmx\$ResultingFileName.fmx"
}

如果要等待编译下一个项目,直到当前编译完成,您还可以将-Wait参数添加到Start-Process命令。