[解決済み] 現在のPowerShell実行ファイルを取得するにはどうすればよいですか?
2022-10-02 12:10:32
質問
注:PowerShell 1.0
現在実行中のPowerShellのファイル名を取得したい。つまり、私がこのようにセッションを開始した場合です。
powershell.exe .\myfile.ps1
文字列を取得したい
".\myfile.ps1"
(という文字列(またはそのようなもの)を取得したいのですが。
EDIT
:
"myfile.ps1"。
が望ましいです。
何かアイデアはありますか?
どのように解決するのですか?
PowerShell 5用に更新された、様々な回答をここにまとめてみました。
-
PowerShell 3 以降しか使っていない場合は
$PSCommandPath
-
古いバージョンとの互換性が必要な場合は、シムを挿入してください。
if ($PSCommandPath -eq $null) { function GetPSCommandPath() { return $MyInvocation.PSCommandPath; } $PSCommandPath = GetPSCommandPath; }
これは
$PSCommandPath
を追加します。シムコードはどこでも(トップレベルでも関数内でも)実行可能ですが
$PSCommandPath
変数は通常のスコープルールに従います(例えば、関数内に shim を置いた場合、その変数はその関数にのみスコープされます)。
詳細
様々な回答で使われる4種類のメソッドがあるので、それぞれを実演するためにこのスクリプトを書きました(さらに
$PSCommandPath
):
function PSCommandPath() { return $PSCommandPath; }
function ScriptName() { return $MyInvocation.ScriptName; }
function MyCommandName() { return $MyInvocation.MyCommand.Name; }
function MyCommandDefinition() {
# Begin of MyCommandDefinition()
# Note: ouput of this script shows the contents of this function, not the execution result
return $MyInvocation.MyCommand.Definition;
# End of MyCommandDefinition()
}
function MyInvocationPSCommandPath() { return $MyInvocation.PSCommandPath; }
Write-Host "";
Write-Host "PSVersion: $($PSVersionTable.PSVersion)";
Write-Host "";
Write-Host "`$PSCommandPath:";
Write-Host " * Direct: $PSCommandPath";
Write-Host " * Function: $(PSCommandPath)";
Write-Host "";
Write-Host "`$MyInvocation.ScriptName:";
Write-Host " * Direct: $($MyInvocation.ScriptName)";
Write-Host " * Function: $(ScriptName)";
Write-Host "";
Write-Host "`$MyInvocation.MyCommand.Name:";
Write-Host " * Direct: $($MyInvocation.MyCommand.Name)";
Write-Host " * Function: $(MyCommandName)";
Write-Host "";
Write-Host "`$MyInvocation.MyCommand.Definition:";
Write-Host " * Direct: $($MyInvocation.MyCommand.Definition)";
Write-Host " * Function: $(MyCommandDefinition)";
Write-Host "";
Write-Host "`$MyInvocation.PSCommandPath:";
Write-Host " * Direct: $($MyInvocation.PSCommandPath)";
Write-Host " * Function: $(MyInvocationPSCommandPath)";
Write-Host "";
出力します。
PS C:\> .\Test\test.ps1
PSVersion: 5.1.19035.1
$PSCommandPath:
* Direct: C:\Test\test.ps1
* Function: C:\Test\test.ps1
$MyInvocation.ScriptName:
* Direct:
* Function: C:\Test\test.ps1
$MyInvocation.MyCommand.Name:
* Direct: test.ps1
* Function: MyCommandName
$MyInvocation.MyCommand.Definition:
* Direct: C:\Test\test.ps1
* Function:
# Begin of MyCommandDefinition()
# Note this is the contents of the MyCommandDefinition() function, not the execution results
return $MyInvocation.MyCommand.Definition;
# End of MyCommandDefinition()
$MyInvocation.PSCommandPath:
* Direct:
* Function: C:\Test\test.ps1
注意事項
-
から実行されます。
C:\
であるが、実際のスクリプトはC:\Test\test.ps1
. -
を伝えるメソッドはありません。
が渡される
の起動パス (
.\Test\test.ps1
) -
$PSCommandPath
は唯一の信頼できる方法ですが、PowerShell 3 で導入されました。 - 3 より前のバージョンでは、単一のメソッドが関数の内側と外側の両方で機能することはありません。
関連
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] PowerShellでコードをコメントアウトする方法とは?
-
[解決済み] Windows PowerShellの環境変数を設定する
-
[解決済み] 現在のPowerShellスクリプトの場所を特定する最良の方法は何ですか?
-
[解決済み] PowerShellでスクリプトを終了させる
-
[解決済み] Powershellで複数のファイル内の文字列を検索してファイル名を返すには?
-
[解決済み】PowerShellスクリプトを実行する方法
-
[解決済み】PowerShellで条件を否定する方法は?
-
[解決済み】PowerShellで、ファイルに関数を定義して、PowerShellのコマンドラインから呼び出すにはどうしたらいいですか?
-
[解決済み】PowerShell Aliasesを永久に作成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】powershellで再利用するために資格情報を保存すると、ConvertTo-SecureString : Key not valid for use in specified stateというエラーが発生する。
-
[解決済み] スクリプト内の特定の場所にジャンプする
-
[解決済み] Powershellスクリプトから7-Zipを実行する
-
[解決済み] Get-ADUser でのエラー: 無効な列挙コンテキスト
-
[解決済み] PowerShellにおけるセット(データ構造)
-
[解決済み] PowerShellで使用するGetType、変数の違いについて
-
[解決済み] Base64の文字列をデコードするには?
-
[解決済み] 'Connect-MsolService' はコマンドレット名として認識されません。
-
[解決済み] PowerShellでコンソールに書き込むには?
-
[解決済み] Get-MSolUserのフィルタリング方法