如何在多脚本中使用powershell函数?

时间:2010-11-17 11:17:41

标签: windows internet-explorer function powershell

我的C#程序应该通过打开执行powershell功能,如下所示:

function RunIE 
{    
    $a = Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -name ProgramFilesDir
    $path = $a.ProgramFilesDir + "\Internet Explorer\iexplore.exe"

    & $path "www.heise.de" -extoff

    Start-Sleep 6

    $shell = (New-Object -COM Shell.Application)
    $ie = @($shell.Application.Windows()) | Where-Object { $_.LocationUrl -like "*heise*" }

    Write-Output $ie 
} 

$ScriptLog.Invoke([log4net.Core.Level]::Debug, "Funktionsdurchlauf durchgeführt") 

最后的日志将写在我的日志文件中。 (所以我觉得这很有效。)

在C#程序运行期间,应该执行另一个脚本,如下所示:

    ...    

    $ie = RunIE  
    #here I get a mistake: "The term 'RunIE' is not recognized as the name of a 
    #cmdlet, function, script file, or operable program. Check the spelling of the 
    #name, or if a path was included, verify that the path is correct and try again."

    $ie.Navigate2($path)
    Start-Sleep 5

    ...

如何在没有新/第二次调用的情况下在其他脚本中使用我的函数? (我认为解决方案必须在powershell中创建。)

感谢。

1 个答案:

答案 0 :(得分:2)

您需要点源包含要在脚本中使用的函数和脚本范围变量的脚本。例如,如果IEUtils.ps1包含您的RunIE函数,那么您可以将其点源到主脚本,如下所示:

. C:\Temp\IEUtils.ps1
$ie = RunIE

这假设在C:\ Temp中的IEUtils.ps1。根据需要替换适当的目录。如果它与主脚本位于同一目录中,则使用:

$ScriptPath = $MyInvocation.MyCommand.Path
$ScriptDir  = Split-Path -parent $ScriptPath
. $ScriptDir\IEUtils.ps1