【问题标题】:PowerShell file types ps1 vs psm1 in context with implicit remotingPowerShell 文件类型 ps1 与 psm1 在隐式远程处理的上下文中
【发布时间】:2017-07-05 17:18:18
【问题描述】:

总结

我目前正在集中化 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

【问题讨论】:

  • 嗯,我正在寻找的是看看使用 psm1 是否比 ps1 更有效。你发给我的那个链接真的很好,就 psconfig 文件而言,我实际上正在使用该设置。

标签: powershell


【解决方案1】:

我不确定您所说的更高效是什么意思,但让我指出几点:

  1. Use well-formed modules,即为您的模块创建适当的目录结构,使用.psm1 模块文件和.psd1 模块清单。
  2. 确保模块位于模块路径中的路径中(参见上面的链接)。这种方式可以在没有完整路径信息的情况下按名称导入。
  3. 当您使用Import-PSSession 时,您可以使用-Module ModuleA,ModuleB 仅导入指定模块导出的命令,而不是导入单个命令(您将完全省略-command)。
  4. 您可以在一次调用Invoke-Command 中运行许多命令。它需要一个脚本块;您可以将整个程序放在那里,因此没有理由进行多次单独调用来导入多个模块。
  5. 但更进一步,Import-Module 可以导入多个模块:Import-Module -Name ModuleA,ModuleB,ModuleC
  6. Using a session configuration 将允许您指定自动加载的模块,以便您可以直接远程进入预配置的会话。

【讨论】:

  • 谢谢布赖恩是我一直在寻找的。我问的是 ps1 与 psm1 的区别,因为我知道 ps1 可能会因为点源而增加资源税。我会在一段时间后发布我的结果。
猜你喜欢
  • 2023-03-28
  • 2014-10-25
  • 2020-09-19
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多