Als Alternative zu dem, was Jonathan erwähnt, wenn Sie Quellmodule haben, die Sie über die Leitung schieben möchten, können Sie das ohne große Probleme tun. Wenn Sie Binärdateien haben, können Sie in der Lage sein, etwas Ähnliches zu tun. Aber ich würde sagen, dass alle Wetten weg sind. Im Wesentlichen schieben Sie die Dateien als Parameter in einem Hash, schreiben Sie in Temp, und importieren Sie dann.
function Export-SourceModulesToSession
{
Param(
[Management.Automation.Runspaces.PSSession]
[ValidateNotNull()]
$Session,
[IO.FileInfo[]]
[ValidateNotNull()]
[ValidateScript(
{
(Test-Path $_) -and (!$_.PSIsContainer) -and ($_.Extension -eq '.psm1')
})]
$ModulePaths
)
$remoteModuleImportScript = {
Param($Modules)
Write-Host "Writing $($Modules.Count) modules to temporary disk location"
$Modules |
% {
$path = ([IO.Path]::GetTempFileName() + '.psm1')
$_.Contents | Out-File -FilePath $path -Force
"Importing module [$($_.Name)] from [$path]"
Import-Module $path
}
}
$modules = $ModulePaths | % { @{Name = $_.Name; Contents = Get-Content $_ } }
$params = @{
Session = $Session;
ScriptBlock = $remoteModuleImportScript;
Argumentlist = @(,$modules);
}
Invoke-Command @params
}
Anruf wie
$session = New-PSSession -ComputerName Foo
Export-SourceModulesToSession $session -ModulePaths '.\module.psm1','.\module2.psm1'
auch theoretisch möglich, eine aktuelle lokale Host-Sitzung zu exportieren, dass über den Draht Modul und Schieben - ungetestet Pseudocode. Dies könnte nicht funktionieren ...
$localSession = New-PSSession #defaults to localhost
# if you don't have modules automatically loading in the profile, etc, then manually load them
Invoke-Command -Computer $localSession -ScriptBlock { Import-Module 'foo'; Import-Module '.\module.ps1' }
Export-PSSession $localSession -OutputModule TempLocalModule
#now that you have TempLocalModule written out, it's possible you can send that thing across the wire in the same way
Ich stehe korrigiert. :-) Netter Ansatz, um die Fähigkeit zu nutzen, Commands vom Remote-Computer zu importieren und auf den Kopf zu stellen, um sie vom lokalen Computer zu importieren. BTW importieren Sie basierend auf Pfad (anstelle von Modulname), weil Sie auf ein Problem stoßen? –
Sie können ein Modul nur dann anhand des Namens importieren, wenn sich die Moduldatei an einem der Standardmodulpositionen befindet. Wenn nicht, müssen Sie ihm den Dateipfad geben. Ich stieß auf ein Problem mit Assembly-Modulen, die aus einem Modul-Manifest psd1 importiert werden. Die PSModuleInfo.Path-Eigenschaft für ein Binärmodul verweist auf die DLL anstelle von PSD1. Wenn Sie direkt von der DLL importieren, schlägt import-psession fehl. Daher alle Voodoo, um die PSD1-Datei für ein Assembly-Modul zu erhalten. –
Verwenden Sie diese Methode noch oder haben Sie einen besseren Weg gefunden? – icnivad