摘要
我目前正在集中PowerShell脚本。大量用户可以使用隐式远程访问来访问这些脚本。
问题:
使用psm1比ps1更有效吗?鉴于下面的设置和脚本的结构?
自动化隐式远程处理的示例脚本:(请注意导入的模块是ps1)
$poshSession = New-PSSession -ComputerName serverA -Authentication Kerberos -ConfigurationName poshconfig
Set-Alias -Name rs -Value Resolve-RemotingSession -Description 'Resolves and imports sessions and obtains specific commands'
function Resolve-RemotingSession
{
# Import Modules
Invoke-command -ScriptBlock { Import-Module -Name 'ModuleA.ps1' } -Session $poshSession
Invoke-command -ScriptBlock { Import-Module -Name 'ModuleB.ps1' } -Session $poshSession
Invoke-command -ScriptBlock { Import-Module -Name 'ModuleC.ps1' } -Session $poshSession
Invoke-Command -ScriptBlock { Import-Module -Name 'ModuleD.ps1' } -Session $poshSession
Import-PSSession -Session $poshSession -commandname *CommandA,CommandB,CommandC,CommandD* -AllowClobber
}
其中一个导入脚本的示例...请注意,每个ps1脚本都有大约15到20个结构,其结构类似于以下内容:
function Get-FooBarA{
param(
[switch]$Search,
[string]$Term
)
$foobarResults = Invoke-Restmethod -method Get -Uri www.fooA.com/$Search/$term
$foobaresults.Something
}
function Get-FooBarB{
param(
[switch]$Search,
[string]$Term
)
$foobarResults = Invoke-Restmethod -method Get -Uri www.fooB.com/$Search/$term
$foobaresults.Something
}
据我所知,这个设置可能是资源密集型的,我强迫用户在每次使用.ps1脚本设置会话时导入脚本。
如果我决定使用.psm1文件扩展名(将这些扩展名转换为模块)有没有办法保持这些模块的持久导入,以便我可以从启动PS会话的脚本中删除以下命令?
Invoke-command -ScriptBlock { Import-Module -Name 'ModuleA.ps1' } -Session $poshSession
答案 0 :(得分:1)
我不确定你的意思是什么更高效,但让我指出一些事情:
.psm1
模块文件和.psd1
模块清单。Import-PSSession
时,您可以使用-Module ModuleA,ModuleB
仅导入指定模块导出的命令(完全不使用-command
),而不是导入单个命令。 Invoke-Command
来运行多个命令。它需要一个scriptblock;你可以将整个程序放在那里,所以没有理由进行多个单独的调用来导入多个模块。Import-Module
可以导入多个模块:Import-Module -Name ModuleA,ModuleB,ModuleC