相关疑难解决方法(0)

确定当前PowerShell脚本位置的最佳方法是什么?

每当我需要引用一个公共模块或脚本时,我喜欢使用相对于当前脚本文件的路径,这样,我的脚本总能找到库中的其他脚本.

那么,确定当前脚本目录的最佳标准方法是什么?目前,我正在做:

$MyDir = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)
Run Code Online (Sandbox Code Playgroud)

我知道在模块(.psm1)中你可以使用它$PSScriptRoot来获取这些信息,但这不会在常规脚本(即.ps1文件)中设置.

获取当前PowerShell脚本文件位置的规范方法是什么?

powershell powershell-2.0

492
推荐指数
11
解决办法
46万
查看次数

在PowerShell中,如何在文件中定义函数并从PowerShell命令行调用它?

我有一个.ps1文件,我想在其中定义自定义函数.

想象一下,该文件名为MyFunctions.ps1,内容如下:

Write-Host "Installing functions"
function A1
{
    Write-Host "A1 is running!"
}
Write-Host "Done"
Run Code Online (Sandbox Code Playgroud)

要运行此脚本并理论上注册A1函数,我导航到.ps1文件所在的文件夹并运行该文件:

.\MyFunctions.ps1
Run Code Online (Sandbox Code Playgroud)

这输出:

Installing functions
Done
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试调用A1时,我只是得到错误,指出该名称没有命令/功能:

The term 'A1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling
 of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:3
+ A1 <<<<
    + CategoryInfo          : ObjectNotFound: (A1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
Run Code Online (Sandbox Code Playgroud)

我必须误解一些PowerShell概念.我可以不在脚本文件中定义函数吗?

请注意 …

powershell

214
推荐指数
6
解决办法
22万
查看次数

如何找到执行脚本的源路径?

我希望能够告诉我执行脚本的运行路径.
这往往不是$ pwd.

我需要调用相对于我的脚本的文件夹结构中的其他脚本,虽然我可以对路径进行硬编码,但是当尝试从"开发"升级到"测试"时,这既令人反感又有点痛苦"生产".

powershell powershell-1.0

61
推荐指数
5
解决办法
8万
查看次数

Dot-Sourced 文件中的 PSScriptRoot 如何工作?

假设我有 2 个文件A.ps1B.ps1,在此目录结构中:

--  root
 |
 |-- A.ps1
 |
 |--  subfolder
   |
   |-- B.ps1
Run Code Online (Sandbox Code Playgroud)

A.ps1:

Write-Host $PSScriptRoot
Run Code Online (Sandbox Code Playgroud)

B.ps1:

. "\root\A.ps1"
Run Code Online (Sandbox Code Playgroud)

现在,考虑到这一事实

点采购获取您指定的脚本并立即执行它,就像它位于原始脚本中的该位置一样

问题:如果我运行B.ps1,我期望结果是\root\subfolder,但它是\root,为什么?

如果A.ps1是点源到 中B.ps1,那么脚本的内容不应该直接在 中写入一样A.ps1运行吗?意思是,不应该像从 调用一样运行,从而评估为? 我什至通过包装一个函数并在点采购调用该函数来测试这一点。仍然产生相同的结果..B.ps1$PSScriptRootB.ps1\root\subfolderA.ps1B.ps1

点采购到底是如何运作的?

powershell relative-path dot-source

4
推荐指数
1
解决办法
651
查看次数