Jon*_*eus 14 powershell powershell-remoting powershell-module
有没有办法使用在远程会话中的本地会话中导入的模块?我查看了import-pssession,但我不知道如何获得本地会话.这是我想要做的样本.
import-module .\MyModule\MyModule.ps1
$session = new-pssession -computerName RemoteComputer
invoke-command -session $session -scriptblock { Use-CmdletFromMyModule }
Run Code Online (Sandbox Code Playgroud)
另外,我不想在远程会话中导入模块,因为ps1文件不在该服务器上.
Jon*_*eus 10
我最终破解了这个工作.我所做的是创建一个本地会话,将模块导入该会话,并使用import-pssession将模块从创建的本地会话导入到远程会话中.这很慢.如果有人有更好的方法,或者如果有人知道如何获得基本会话的实例,我很乐意听到你的意见!
Remoting.psm1
function Export-ModuleToSession {
Param(
[ValidateNotNull()]
$session,
[ValidateNotNull()]
$modules
)
$computername = $env:computername
$modulesToImport = get-module -name $modules
invoke-command -session $session -argumentlist @($computername, $modulesToImport) -scriptblock {
Param(
$computername,
$modules
)
write-host ("Creating Temp Session On: " + $computername)
$localSession = New-psSession -computername $computername
$modules | foreach-object {
if($_.ModuleType -ne "Binary") {
$path = $_.path
}
else {
$path = join-path (split-path $_.Path) ("{0}.psd1" -f $_.name)
}
invoke-command -session $localSession -argumentList $path -scriptblock {
Param(
$path
)
$initializeDefaultBTSDrive = $false
set-executionpolicy unrestricted
write-host ("Importing Module To Temp Session: " + $path)
import-module $path
}
}
$initializeDefaultBTSDrive = $false
$modules | foreach-object {
write-host ("Exporting Module: " + $_.name)
import-psSession -session $localSession -Module $_.name | out-null
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyModule.psm1
function MyCmdlet {}
Run Code Online (Sandbox Code Playgroud)
RemotingTest.ps1
import-module .\remoting.psm1
import-module .\MyModule.psm1
try
{
$remoteSession = New-PsSession -computerName "RemoteComputer"
Export-ModuleToSession -session $remoteSession -modules "MyModule"
Invoke-Command -session $remoteSession -scriptblock { MyCmdlet } -verbose -ea Stop
}
finally
{
Remove-PsSession $remoteSession -ea Continue
Remove-Module "Remoting" -ea Continue
Remove-Module "MyModule" -ea Continue
}
Run Code Online (Sandbox Code Playgroud)
我不相信你可以。您可以采用另一种方式 - 将远程计算机上加载的命令导入到本地计算机上运行的远程会话中。您可以指定一个脚本来调用命令,它会将该脚本复制到远程计算机并运行它。但是,如果您需要管理单元或其他模块,则需要确保它们安装在每台远程计算机上,然后通过命令或脚本将它们加载到远程会话中。
归档时间: |
|
查看次数: |
20908 次 |
最近记录: |