在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提供程序,如Certificate
、Registry
或WSMan
。一个进程可以有多个活动的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)