使用函数设置脚本文件夹位置失败

时间:2015-09-04 19:03:30

标签: powershell

我创建了一个带有一段代码的函数,该代码在脚本中运行良好但在转换为函数时失败。

代码将脚本所在的位置设置为当前位置。

Function Set-ScriptFolder
{
    <#
        .SYNOPSIS
        Sets the location to the folder where the script folder resides.
        .DESCRIPTION
        Sets the location to the folder where the script folder resides.
        .EXAMPLE
        Set-ScriptFolder
        .EXAMPLE
        Set-ScriptFolder
    #>


    $location = Split-Path $MyInvocation.MyCommand.Path
    set-location $location

}

输出结果为:

Split-Path : Cannot bind argument to parameter 'Path' because it is null.

set-location : Cannot process argument because the value of argument "path" is null. Change the value of argument
"path" to a non-null value.

任何想法如何转换:

   $location = Split-Path $MyInvocation.MyCommand.Path
    set-location $location

到函数?

由于

1 个答案:

答案 0 :(得分:2)

如果你看一下你会看到的documentation for $MyInvocation ......

  仅为脚本,函数和脚本块填充

$MyInvocation。          您可以使用System.Management.Automation.InvocationInfo中的信息          $ MyInvocation在当前脚本中返回的对象,例如路径          和脚本的文件名($MyInvocation.MyCommand.Path或者名称          函数$MyInvocation.MyCommand.Name)来识别当前命令。

您可以看到函数内的$MyInvocation.MyCommand.Name输出将返回:

Set-ScriptFolder

替代解决方案

您可以使用automatic variable $PSScriptRoot代替。

Set-Location $PSScriptRoot 

这也应该在函数内部起作用。如果您愿意,只要您拥有PowerShell 3.0或更高版本,您也可以使用PSScriptRoot的{​​{1}}。

$MyInvocation

只有一行的功能似乎有点矫枉过正。