2016-10-29 5 views
1

Ich habe ein POSH-Skript, das ich nicht herausfinden kann, läuft nicht ..PowerShell-Funktion mit Parametern?

function Connect-AD 
{ 
    Param($mod,$cmd) 
    Write-Host "$mod $cmd" 
    Write-Host "`tConnecting to AD: $DC`n" 
    $ADSession = New-PSsession -ComputerName $DC -Credential $MyCredential 
    Invoke-Command -Command {Import-Module ('$mod') -Cmdlet ('$cmd')} -Session $ADSession 
    Import-PSSession -Session $ADSession -Module ('$mod') -Prefix r | Out-Null 
} 

ich dann versuchen, dies zu rufen mit ..

Connect-AD -mod 'ActiveDirectory' -cmd 'Get-ADUser,New-ADUser' 

Aber keine mater, was ich tun, halten erhalten ..

Das angegebene Modul '$ mod' wurde nicht geladen, da keine gültige Moduldatei in einem Modulverzeichnis gefunden wurde.

Der Write-Host innerhalb der Funktion gibt die Parameter korrekt aus, so dass es soweit kommt. Es wird jedoch nicht in Invoke-Command oder Import-PSSession übergeben?

Ich habe verschiedene Möglichkeiten ausprobiert, die Parameter usw. zu entkommen .. aber kein Glück.

Was mache ich nicht richtig? Kann mir jemand helfen? Vielen Dank.

Antwort

7

Einzeln zitierte Strings interpolieren keine Variablen, '$mod' ist eine Literalfolge "dollar m o d".

Und wahrscheinlich müssen Sie alle ähnlichen Fragen zur Übergabe von Parametern an Invoke-Command lesen, da der Befehl {} auf einem anderen Computer ausgeführt wird - woher weiß er, was die Variable $mod auf Ihrem Computer ist?

Passing string $variable to invoke-command scriptblock parameter -name

Powershell: How to pass parameter with invoke-command and -filepath remotely?

So etwas wie

Invoke-Command -Command {param($mod, $cmd) Import-Module $mod -Cmdlet $cmd} -Session $ADSession -ArgumentList $mod,$cmd 

Hilfe Links (falls vorhanden):