如何获取PowerShell脚本的文件系统位置?
问题描述:
我有一个位于D:\temp
的PowerShell脚本。如何获取PowerShell脚本的文件系统位置?
当我运行这个脚本时,我想要列出文件的当前位置。我该怎么做呢?
例如,这段代码可以在DOS批处理文件中完成它;我试图将其转换为一个PowerShell脚本...
FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"
答
的PowerShell 3+
运行脚本的路径是:
$PSCommandPath
其目录是:
$PSScriptRoot
PowerShell 2
运行脚本的路径是:
$MyInvocation.MyCommand.Path
其目录是:
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
答
罗马库兹明恕我直言回答了这个问题。我只是补充一点,如果你导入一个模块(通过Import-Module
),你可以在模块内部访问$PsScriptRoot
自动变量 - 它会告诉你模块位于何处。
完美。谢谢! – Santhosh 2010-09-08 13:20:12
请小心使用'$ PSSriptRoot'。它是模块中的预定义变量。 – 2010-09-08 13:35:53
@Keith,基本上我同意推荐给所有人使用$ PSScriptRoot并不是一个好主意。至少它不应该用在生产脚本中。我刚刚从我的“个人”脚本中复制/粘贴。我使用这个名字是因为它很方便:我的代码在任何地方都使用$ PSScriptRoot:模块(内置)和脚本(假)。 – 2010-09-08 14:20:42