设置位置与设置当前目录



在Powershell中之间有什么区别

Set-Location "$env:ProgramFilesMy App"

[System.IO.Directory]::SetCurrentDirectory("$env:ProgramFilesMy App")

之所以这样问,是因为我最近有一个脚本,它使用Add-Type -Path XXX来添加对程序集的引用。该程序集依赖于与该程序集位于同一文件夹中的多个DLL(有些可能在运行时而非加载时链接)。

所以我想我应该将目录更改为文件夹,以帮助程序集找到所有必要的文件。当我使用Set-Location更改目录时,我收到一个错误(特定于程序集的错误),抱怨它找不到所有DLL。然而,使用SetCurrentDirectory是有效的。

因此,这两个命令似乎在做不同的事情。我本以为他们也一样。

Set-Location设置PowerShell Runspace的当前位置。PowerShell位置可以指向任何PowerShell提供程序,如CertificateRegistryWSMan。一个进程可以有多个活动的PowerShell Runspace,每个进程都有自己的当前位置,并且所有进程都可以彼此不同。

[System.IO.Directory]::SetCurrentDirectory设置进程的当前工作目录。进程只有一个当前工作目录,它必须指向文件系统。它不能指向注册表或其他什么。

不幸的是,将System.IO.Directory.SetCurrentDirectory帮助与Set-Location帮助进行比较似乎并不能说明您所经历的行为。但是,查看这篇TechNet文章(使用Set Location Cmdlet),Set-Location似乎会更改当前"名称空间"(TechNet的术语,可能是指运行空间)的工作目录,而SetCurrentDirectory方法会更改powershell进程的工作目录。

System.IO.Directory.SetCurrentDirectory-(https://msdn.microsoft.com/en-us/library/system.io.directory.setcurrentdirectory(v=vs.110).aspx)

Set-Location-(https://technet.microsoft.com/en-us/library/hh849850.aspx)

最新更新