2017-02-16 151 views
1

摘要PowerShell中的文件类型PS1 VS上下文PSM1与隐性远程

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

您是否在寻找[在端点上启动脚本?](https://jamesone111.wordpress.com/2016/06/29/just-enough-admin-and-constrained-endpoints-part- 1-understanding-endpoints /) – BenH

+0

那么我在寻找的是看看使用psm1比ps1更有效。您发给我的链接非常好,我实际上正在使用该设置,只要psconfig文件即可。 –

回答

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将允许您指定获得自动加载的模块,这样就可以远程直接进入一个预配置的会话。
+0

谢谢布莱恩是我正在寻找的。我在问ps1 vs psm1,因为我知道ps1可能会因点源而导致更多的资源征税。我会在一段时间内回复我的结果。 –