Set-Location与SetCurrentDirectory

时间:2016-03-30 10:35:31

标签: powershell

之间的Powershell有什么不同
Set-Location "$env:ProgramFiles\My App\"

[System.IO.Directory]::SetCurrentDirectory("$env:ProgramFiles\My App\")

问的原因是我最近有一个脚本使用Add-Type -Path XXX来添加对程序集的引用。程序集依赖于与程序集位于同一文件夹中的许多DLL(一些可能在运行时链接而不是加载时间)。

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

因此,这两个命令似乎做了不同的事情。我原以为它们是一样的。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

不幸的是,将System.IO.Directory.SetCurrentDirectory帮助与Set-Location帮助进行比较似乎无法提供您所遇到的行为的很多指示,但是查看此TechNet文章(Using the 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