13

さまざまな名詞 (クラスター、SQL サーバー、一般的なサーバー、ファイルなど) を扱う一連の関連関数を作成し、これらの関数の各グループを別々のファイル (たとえば、cluster_utils.ps1 など) に入れています。 . これらのライブラリの一部をプロファイルに「インポート」し、必要に応じて powershell セッションに他のライブラリを「インポート」できるようにしたいと考えています。問題を解決すると思われる 2 つの関数を作成しましたが、powershell を 1 か月しか使用していないため、代わりに使用できる既存の「ベスト プラクティス」タイプのスクリプトがあるかどうかを確認したいと思いました。

これらの関数を使用するには、(プロファイルまたはセッションで) ドットソースします...たとえば、

# 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
}

どんなフィードバックも役に立ちます。

4

3 に答える 3

5

スティーブンの答えに基づいて、別の改善点として、複数のファイルを一度にロードできるようにすることがあります。

$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
  }
}
于 2008-11-16T15:01:20.517 に答える
3

マイク、それらのスクリプトは素晴らしいと思います。関数をライブラリに分割することは非常に便利ですが、スクリプトをロードする関数は非常に便利だと思います。

私が行う 1 つの変更は、ファイルの場所もパラメーターにすることです。デフォルト値を設定したり、グローバル変数を使用したりすることもできます。「.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
}

嬉しい機能!

于 2008-11-11T20:52:41.050 に答える
1

PowerShell v2 の「モジュール」機能は非常に満足できるものであることがわかると思います。基本的にこれを処理します。

于 2008-11-24T21:48:35.980 に答える