Wie importiere ich ein benutzerdefiniertes PowerShell-Modul in die Remote-Sitzung?
Entwickle ich eine benutzerdefinierte PowerShell-Modul, das ich verwenden möchte, im Rahmen einer remote-Sitzung auf einem anderen computer. Den folgenden code (die offensichtlich nicht funktioniert) erklärt, was ich versuche zu erreichen:
import-module .\MyCustomModule.psm1
$session = new-pssession -computerName server01
invoke-command -session $session -scriptblock {
<# use function defined in MyCustomModule here #>
}
Die erste Frage ist, ob es überhaupt möglich ist, um dieses Szenario zu erhalten? Ich meine, ich würde nur gerne meine custom Modul, physisch anwesend zu sein, auf meinem Rechner, nicht auf dem remote-server.
Habe ich gefunden dieser thread, aber ich schaffte es nicht ihn zu arbeiten - es nicht erlauben, Sitzung erstellen von remote-Maschine wieder auf die lokale. Wahrscheinlich Stand ich mit der Konfiguration Einschränkungen erwähnt irgendwo in den Kommentaren zu diesem thread... Außerdem, der Autor erwähnt die Auswirkungen auf die Leistung, die kritisch für meine Lösung...
Wenn das möglich ist, was dann?
Version von PowerShell ist derzeit nicht eine Einschränkung -, wenn die Lösung nur in PS 3.0 - damit kann ich Leben.
Import-Modul \\fileserver\Ordner\modulefolder
? Stellen Sie sicher, dass es Digital signiert ist oder so etwas wie Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope-Prozess
vor dem Import zu umgehen Warnungen? InformationsquelleAutor der Frage Yan Sklyarenko | 2013-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gab es einige tolle Kommentare auf die Frage, und ich habe einige Zeit damit verbracht untersucht verschiedene Möglichkeiten, dieses problem anzugehen.
Beginnen mit, was ich habe zunächst gefragt, ist nicht möglich. Ich meine, wenn man das Modul Weg, dann das Modul soll physisch auf einem Zielcomputer in der Lage sein, um
Import-Module
in die remote-Sitzung.Abstrakten meine Frage, ich bin versucht, erstellen Sie eine wiederverwendbare PowerShell-basiertes framework für die Produkt-Bereitstellungen. Es geht um eine push-Weise-Bereitstellungen, was bedeutet, dass wir Menschen zu ermutigen, laufen einige Skripte auf einem lokalen Computer bereitstellen, auf einigen remote-server. Soweit ich in der Gegend erforscht, es gibt zwei Möglichkeiten, die freundlich sind, den common sense.
- Module Ansatz
Den Prozess zu Folgen:
*.psm1
)PSModulePath
variable, um die neuen Module LageInvoke-Command -Session $s -ScriptBlock {...}
Import-Module CustomModule
- es wird nachCustomModule
auf einem remote-Rechner, und offensichtlich finden esVorteile
Im folgenden sind die Gründe, die Liebe, die diese Vorgehensweise für:
Nachteile
Ist Folgendes zu berücksichtigen:
xcopy
aus dem freigegebenen Ordner. Neben der Lieferung Mechanismus unterstützen sollte, upgrade /downgrade und (vorzugsweise) Installationen mit mehreren Instanzen, aber das ist mehr im Zusammenhang mit meiner Aufgabe als das problem im AllgemeinenScripts Ansatz
Den Prozess zu Folgen:
Invoke-Command -Session $s -FilePath .\myscript.ps1
zum laden der Funktionen in einem Skript definiert wurden, um die remote-SitzungInvoke-Command -Session $s -ScriptBlock {...}
und finden Sie Ihre benutzerdefinierten Funktionen - Sie werden es in einer SitzungVorteile
Die folgenden sind gute Punkte für diesen Ansatz:
Nachteile
Sicher, es ist nicht ideal:
Schließlich sollte ich sagen, dass die remote-Maschine muss noch vorbereitet werden für das remoting. Dies ist, was ich meine:
Set-ExecutionPolicy Unrestricted
Enable-PSRemoting
InformationsquelleAutor der Antwort Yan Sklyarenko
Hier ist ein anderer Ansatz: Erstellen Sie das Modul in einer remote-Sitzung, ohne kopieren von Dateien.
Ich habe keinerlei Versuch unternommen, zu bewältigen Abhängigkeiten zwischen Modulen gibt, aber das scheint zu funktionieren ok für einfache in sich geschlossene Module. Es stützt sich auf das Modul angeboten in der lokalen Sitzung, da dies macht die Bestimmung der Exporte einfacher, aber mit ein wenig Arbeit, es würde auch funktionieren mit einer Modul-Datei.
InformationsquelleAutor der Antwort Rob
Ich glaube nicht, dass das unterstützt wird rechts neben dem Feld, ohne irgendwelche "hacks". Der smart move wäre wahrscheinlich zu setzen Sie das Modul auf einen öffentlichen Ort wie einen fileserver und importieren es auf dem server, wenn Sie es brauchen. Ex:
InformationsquelleAutor der Antwort Frode F.
Was macht Skriptblock aus der benutzerdefinierten Funktion und senden Sie ab terget Server mit
Invoke-command
InformationsquelleAutor der Antwort Jiří Soyka Domin