In alternativa a ciò che Jonathan menziona, se si dispone di moduli di origine che si desidera spingere sul filo, è possibile farlo senza troppi problemi. Se hai i binari, puoi essere in grado di fare qualcosa di simile. Ma direi che tutte le scommesse sono lì. In pratica si spinge i file come parametri in un hash, si scrive in temp, quindi si importa.
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
}
chiamata come
$session = New-PSSession -ComputerName Foo
Export-SourceModulesToSession $session -ModulePaths '.\module.psm1','.\module2.psm1'
anche teoricamente possibile, l'esportazione di una sessione di localhost corrente al modulo e spingendo che sul filo - non testata pseudo-codice. Questo potrebbe non funzionare ...
$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
fonte
2012-04-26 17:30:01
Sono in posizione corretta. :-) Un buon approccio nel prendere la capacità di importare commmands dal computer remoto e girarlo in testa per importarlo dal computer locale. A proposito, stai importando in base al percorso (anziché al nome del modulo) perché hai riscontrato un problema? –
È possibile importare un modulo solo per nome se il file del modulo si trova in una delle posizioni predefinite del modulo. Se non lo è, devi dargli il percorso del file. Mi sono imbattuto in un problema con i moduli assembly che sono stati importati da un manifest manifest di psd1. La proprietà PSModuleInfo.Path per un modulo binario punta alla DLL invece che a psd1. Se si importa direttamente dalla dll, quindi import-pssession fallirà. Quindi tutto il voodoo per ottenere il file psd1 per un modulo assembly. –
Usi ancora questo metodo o hai trovato un modo migliore per farlo? – icnivad