1. ホーム
  2. powershell

[解決済み] PowerShellスクリプトでスクリプトコードを再利用/インポートするにはどうすればよいですか?

2023-06-12 08:33:48

質問

とまったく同じことをする PowerShell スクリプトを作成する必要があります。 前のスクリプト と同じことを行う PowerShell スクリプトを作成しなければなりませんが、今回は XML ファイルの代わりに CSV ファイルを読み込む必要があります。私の計画は、両方のスクリプトに必要な共通の関数を持つ PowerShell スクリプトを作成し、この共通のスクリプト ファイルを両方のメイン ファイルで再使用することです。

の 2 つのディレクトリに 2 つのメイン ファイルを作成するとします。 C:\ ドライブに作成し、共通ファイルと他の3つの rd パーティ・ライブラリは D:\ ドライブ、例えば C:\script_1_folder\Script1.ps1 , C:\script_2_folder\Script2.ps1 と共通ファイル、3 rd パーティ・ライブラリは D:\script_common .

  1. メインファイルで共通ファイルを呼び出す方法(パスの取得方法、共通ファイルのインスタンスを作成する必要があるか、使用方法など)

    とはどのような違いがあるのでしょうか?

    $script_path    = $myinvocation.invocationname;      
    $script_folder  = split-path $script_path -parent;
    write-host  $script_folder  
    $script_name    = split-path $script_path -leaf;      
    $current_folder = [system.io.directory]::getcurrentdirectory()    
    [system.io.directory]::setcurrentdirectory($script_folder)
    Set-Location $script_folder
    add-type -path ".\AlexFTPS-1.1.0\AlexPilotti.FTPS.Client.dll"
    
    

    $path = (split-path $MyInvocation.MyCommand.Path) 
    $loggerPath = $path + "\Logger\release\Logger.ps1";
    .$loggerPath; 
    $logger = Logger;   
    $logger.load($path + "\Logger\config\log4ps.xml","log.log"); 
    
    

    で、私の問題に関してはどうすればいいのでしょうか?

  2. Windows の temp フォルダに temp フォルダを作成するにはどうすればよいですか。

どのように解決するには?

Powershellの共通コード

インクルードしたいコードを別の PS1 ファイルに置き、そのファイルを "dot source" して現在のスコープにインクルードすればよいのです。

. D:\script_common\MyCode.ps1

以上です。

モジュールを使う

代わりに、モジュールを使うことを検討してもよいでしょう。 Import-Module コマンドレットを使用します。Active Directory のようなものを扱うのにこれを使ったことがあるかもしれませんが、そこではこのようなことができます。

Import-Module ActiveDirectory

この場合、モジュールは特別なディレクトリにあるので、モジュールの名前だけが必要です。

Powershellで独自のモジュールを書くには、モジュールの名前に .psm1 拡張子で名前を付けます。通常、この中でフリーフローティングコードを書くことはありません。モジュールをインポートしたコードが利用できる関数を書きます。

どこからでもスクリプトモジュールをインポートするために、フルパスを使用してください。

Import-Module D:\script_common\MyModule.psm1

モジュールパス

自分でモジュールを作成した場合、古い場所にはモジュールを置いておき、フルパスで参照することができます (上記のように)。また、いくつかの の位置でモジュールを探します。 :

  • $PSHome\Modules (%Windir%System32³³WindowsPowerShell³³v1.0Modules) -- ご参照ください。 Windowsに同梱されているモジュール用に予約されています。ここに物を置かないでください。
  • $Home\Documents\WindowsPowerShell\Modules (%UserProfile%Documents﹑WindowsPowerShell﹑Modules)
  • %ProgramFiles%

    Desired State Configuration モジュールのために多く使用されているようです (おそらくシステム全体に適用されるため)。

これらはデフォルトですが、Powershell は独自の環境変数 PSModulePath という独自の環境変数を使ってどこを見るかを決めています。 PATH と同様に、この変数に独自のフォルダを追加することができます。

これで、自分のモジュールを自分の好きな場所に置くことができます。フォルダをどのように構成するか、どのように命名するかについての詳細は、リンクを参照してください。

自分のモジュールとサードパーティのモジュールを同じ場所に置くかどうかは、サードパーティのものによって異なります。独自のモジュールを独自の場所にインストールし、パスを変更することもできますし、好きな場所に置くことができるかもしれません。

Temp フォルダの作成

この機能を利用し TEMP または TMP 環境変数を使用して、temp フォルダのパスを取得します。Powershellでこれらを取得するには、以下のようにします。 $env:TEMP または $env:TMP .

そこに作成するフォルダのユニークな名前を考えなければなりません。そのための1つの方法として、GUIDを使用することができるかもしれません。

$dirName = [System.Guid]::NewGuid().ToString()
New-Item -Path "$($env:TEMP)\$dirName"