非常に遅い答えですが、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ディレクトリであり、とにかく常にこのようなものを実行しているので、それは問題ではないと判断しましたが、それを覚えておくことができます。
これを達成するためのよりエレガントな方法も確かにありますが、それが何であるかはわかりませんでした。