在powershell中导入“库”

时间:2008-11-11 04:09:49

标签: powershell import

我发现自己正在编写一堆处理不同名词的相关函数(集群,sql服务器,一般服务器,文件等),并将这些函数组中的每一个放在不同的文件中(比如cluster_utils.ps1,例如)。我希望能够在我的个人资料中“导入”其中一些库,如果我需要,可以在我的PowerShell会话中“导入”其他库。我已经编写了两个似乎可以解决问题的函数,但由于我只使用了powershell一个月,我想我会问是否有任何现有的“最佳实践”类型的脚本我可以使用。 / p>

要使用这些功能,我点源(在我的个人资料或我的会话中)...例如,

# to load c:\powershellscripts\cluster_utils.ps1 if it isn't already loaded
. require cluster_utils    

以下是功能:

$global:loaded_scripts=@{}
function require([string]$filename){
      if (!$loaded_scripts[$filename]){
           . c:\powershellscripts\$filename.ps1
           $loaded_scripts[$filename]=get-date
     }
}

function reload($filename){
     . c:\powershellscripts\$filename.ps1
     $loaded_scripts[$filename]=get-date
}

任何反馈都会有所帮助。

3 个答案:

答案 0 :(得分:5)

Steven's answer的基础上,另一项改进可能是允许一次加载多个文件:

$global:scriptdirectory = 'C:\powershellscripts'
$global:loaded_scripts = @{}

function require {
  param(
    [string[]]$filenames=$(throw 'Please specify scripts to load'),
    [string]$path=$scriptdirectory
  )

  $unloadedFilenames = $filenames | where { -not $loaded_scripts[$_] }
  reload $unloadedFilenames $path
}

function reload {
  param(
    [string[]]$filenames=$(throw 'Please specify scripts to reload'),
    [string]$path=$scriptdirectory
  )

  foreach( $filename in $filenames ) {
    . (Join-Path $path $filename)
    $loaded_scripts[$filename] = Get-Date
  }
}

答案 1 :(得分:3)

迈克,我认为这些剧本很棒。将函数分配到库中非常有用,但我认为加载脚本的功能非常方便。

我要做的一个改变是使文件位置也成为一个参数。您可以设置默认值,甚至可以使用全局变量。您无需添加“.ps1”

$global:scriptdirectory= 'c:\powershellscripts'
$global:loaded_scripts=@{}
function require(){
      param ([string]$filename, [string]$path=$scriptdirectory)
      if (!$loaded_scripts[$filename]){
           . (Join-Path $path $filename)
           $loaded_scripts[$filename]=get-date
     }
}

function reload(){
     param ([string]$filename, [string]$path=$scriptdirectory)
     . (Join-Path $path $filename)
     $loaded_scripts[$filename]=get-date
}

好的功能!

答案 2 :(得分:1)

我认为您会发现PowerShell v2的“模块”功能非常令人满意。基本上为你照顾这个。