2010-11-17 18 views
1

Mon C# -programme devrait être en ouvrant effectuer une powershellfunction, ressemble à ceci:Comment puis-je utiliser une fonction powershell en multi-script?

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") 

Le journal à la fin sera écrit dans mon fichier journal. (Je pense donc que cela fonctionne.)

Au cours de la C# -programme exécute un autre script doit être mené, comme ceci:

...  

    $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 

    ... 

Comment puis-je utiliser ma fonction dans d'autres scripts, sans nouvelle/seconde invocation ? (Je pense que la solution doit créer en PowerShell.)

merci.

+0

Que voulez-vous dire par "utiliser ma fonction sans invocation nouvelle/seconde"? Les fonctions sont utilisées par de nouvelles invocations. Ou voulez-vous juste éviter la duplication de code et l'analyse de nouveaux/seconds? Ou voulez-vous réellement que l'objet '$ ie' soit créé une seule fois? –

Répondre

2

Vous devez doter le script contenant les fonctions et les variables de portée de script que vous souhaitez utiliser dans votre script. Par exemple, si IEUtils.ps1 contenait votre fonction RunIE alors vous dot dans la source primaire de script comme ceci:

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

Cela suppose que IEUtils.ps1 dans C: \ Temp. Subtituer le répertoire approprié selon les besoins. Si c'est dans le même répertoire que votre script principal, utilisez:

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