2017-07-19 2 views
2

Ich habe ein Skript mit den Parametern:Import Funktionen in einem Skript mit Parametern

param (
    [Parameter(Mandatory=$true)][string]$VaultName, 
    [Parameter(Mandatory=$true)][string]$SecretName, 
    [Parameter(Mandatory=$true)][bool]$AddToMono = $false 
) 
... 

In diesem Skript I-Funktionen enthalten sein soll, dass ich in einer anderen ps1-Datei geschrieben: common.ps1

ich in der Regel Import dies mit

. .\common.ps1 

aber wenn ich das im Drehbuch erhalte ich:

The term '.\common.ps1' 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. 

Wie importiere ich common.ps1 in diesem Skript?

Danke!

+0

Geben Sie den vollständigen Pfad des common.ps1 in der Punktquelle –

Antwort

4

Das Problem besteht darin, dass Sie das Skript aus einem anderen Verzeichnis ausführen. PowerShell sucht .\common.ps1 mit dem aktuellen Verzeichnis, nicht das Verzeichnis des Skripts. Um dies zu umgehen, verwenden Sie die integrierte Variable $PSScriptRoot, die den Pfad des aktuellen Skripts enthält. (Ich nehme an, Sie Powershell v3.0 oder höher verwenden.)

common.ps1

function foo { 
    return "from foo" 
} 

with_params.ps1

param (
    [Parameter(Mandatory=$true)][string]$VaultName, 
    [Parameter(Mandatory=$true)][string]$SecretName, 
    [Parameter(Mandatory=$true)][bool]$AddToMono = $false 
) 

. $PSScriptRoot\common.ps1 

Write-Output "Vault name is $VaultName" 
foo 

ich dann diese ausgeführt:

PS> .\some_other_folder\with_params.ps1 -VaultName myVault -SecretName secretName -AddToMono $false 

und bekam diese Ausgabe:

Vault name is myVault 
from foo 
+0

Das funktioniert gut, danke! – MaurGi

Verwandte Themen