4

通常、PowerShellスクリプトファイルは.ps1で終わり、モジュールは.psm1で終わります。

拡張子のないファイルにPowerShellスクリプト/モジュールを含めることはできますか?「ビルド」や「スタート」などだけですか?これにより、特定の環境で問題が発生しますか?

はいの場合、.sh、.psなどの他の「テキスト」拡張子を持つファイルにPowerShellスクリプト/モジュールを含めることはできますか?


。\script.ps1arg1、arg2を入力する代わりに、PowerShellスクリプトを呼び出す簡単な方法はありますか?たとえば、:go arg1、arg2?

4

3 に答える 3

5

いいえ、できません。のエラーメッセージImport-Moduleは非常に明確です。

Import-Module : The extension '.xyz' is not a valid module extension. The supported module extensions are '.dll',
'.ps1', '.psm1', '.psd1', '.cdxml' and '.xaml'. Correct the extension then try adding the file

また、非標準の拡張子を持つスクリプトを呼び出そうとすると、Windowsは単に「これをどのプログラムで開きますか?」というメッセージを表示します。ダイアログ。Powershellで開くことを選択した場合、新しいPowershellプロセスが生成され、同じことを実行します。

常にPowershellで開くように、新しい拡張機能を割り当てようとする.xyzと、終わりのない一連のPowershellプロセスが生成され、それぞれがPowershellの新しいインスタンスでファイルを開こうとしても無駄になります。私はそれを試しました:)

于 2012-09-01T18:28:14.993 に答える
3

これがalias、Powershellの機能の目的です。スクリプトを作成し、で正しく終了してから、エイリアスを作成して、など.ps1として呼び出すことができます。buildstart

ドキュメントを参照してください:get-help about_aliases

于 2012-09-02T14:39:04.703 に答える
0

非常に遅い答えですが、binフォルダー内のすべてのスクリプトに対してこれを実行したかったので、理解するのに時間がかかりました。私はこれで終わりました:

Get-ChildItem -path <bin where your ps1 files live> -Filter *.ps1 |
Foreach-Object{
    $name = $_.Name
    $scptName = $_.Name -split ".ps1",0,"simplematch"
    $scptName = $scptName[0]
    new-alias $name $scptName
}

また、Pythonビン内のすべてのPythonスクリプトにも必要でした。これは、より複雑ですが、それでも実行可能です。

Get-ChildItem -path <pybin path> -Filter *.py |
Foreach-Object{
    $name = $_.Name
    $scptName =  $_.Name -split '.py',0,'simplematch'
    $scptName = $scptName[0]
    $eName = $scptName -split '-',0,'simplematch'
    $eName = $eName[1]
    invoke-expression('
    $val' + $eName + ' = $name
    function doRun' + $eName + '{
        python "<pybin path>/$val' + $eName + '" $args
    }
    $alias = "doRun$ename"
    set-alias $scptName $alias
    ')
}

システム上のファイル名を含む式でinvoke-expressioningを実行しているため、他の人がそのディレクトリに書き込む可能性がある場合、これはセキュリティ上の問題であることに注意してください。これは私のbinディレクトリであり、とにかく常にこのようなものを実行しているので、それは問題ではないと判断しましたが、それを覚えておくことができます。

これを達成するためのよりエレガントな方法も確かにありますが、それが何であるかはわかりませんでした。

于 2020-02-17T04:09:27.300 に答える