具有隐式远程处理的上下文中的PowerShell文件类型ps1与psm1

具有隐式远程处理的上下文中的PowerShell文件类型ps1与psm1,powershell,Powershell,摘要 我目前正在集中powershell脚本。其中大量用户可以通过隐式远程处理访问这些脚本 问题: 使用psm1比使用ps1更有效吗?给定设置的结构和下面的脚本 自动化隐式远程处理的示例脚本:(请注意导入的模块是ps1) 导入的脚本之一的示例。。。请注意,每个ps1脚本大约有15到20个函数,其结构类似于以下内容: function Get-FooBarA{ param( [switch]$Search, [string]$Term ) $foobarResults = Invoke-Restm

摘要

我目前正在集中powershell脚本。其中大量用户可以通过隐式远程处理访问这些脚本

问题:

使用psm1比使用ps1更有效吗?给定设置的结构和下面的脚本

自动化隐式远程处理的示例脚本:(请注意导入的模块是ps1)

导入的脚本之一的示例。。。请注意,每个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

我不确定你说的更高效是什么意思,但让我指出几件事:

  • ,即为模块创建适当的目录结构,使用
    .psm1
    模块文件和
    .psd1
    模块清单
  • 确保模块位于模块路径中的路径中(请参阅上面的链接)。这种方式可以按名称导入,而不需要完整的路径信息
  • 使用
    Import PSSession
    时,您可以使用
    -Module ModuleA、ModuleB
    仅导入指定模块导出的命令,而不是导入单个命令(您可以完全禁用
    -command
  • 您可以在对
    Invoke Command
    的一次调用中运行多个命令。它需要一个脚本块;您可以将整个程序放在其中,这样就没有理由进行多个单独的调用来导入多个模块
  • 而且,
    Import Module
    可以导入多个模块:
    Import Module-名称ModuleA、ModuleB、ModuleC
  • 将允许您指定自动加载的模块,以便您可以直接远程访问预配置的会话

  • 你在找一口井吗?我在找的是看看使用psm1是否比ps1更有效。你发给我的链接真的很好,我现在正在使用这个设置,直到psconfig文件。谢谢Brian,这是我一直在寻找的。我问过ps1和psm1,因为我知道ps1会因为点源而增加资源负担。过一会儿我会把结果发回来。
    Invoke-command -ScriptBlock { Import-Module -Name 'ModuleA.ps1' } -Session $poshSession