为什么[IO.DirectoryInfo]“。\”不返回当前目录?

时间:2014-07-29 14:26:54

标签: .net powershell powershell-v2.0

我在参数验证中广泛使用[IO.DirectoryInfo],结果证明这是非常非常糟糕的事情。

见这里:

PS C:\pathsuppressed>> echo ([IO.DirectoryInfo]".\")

Mode                LastWriteTime     Length Name                                                                                                                                                                      
----                -------------     ------ ----                                                                                                                                                                      
d-r--         29.7.2014     17:06            Desktop             

无论我目前的目录是什么,它都声明我在桌面上。真的?

这样做的正确方法是什么?我可以使用什么“类型”来标记参数是PowerShell脚本中的路径?

附录:

似乎PowerShell联系'。'在shell启动时到某个目录,而不是我当前的目录。这种想法背后可能是什么? (微软善于为PowerShell异常找借口)

enter image description here

2 个答案:

答案 0 :(得分:3)

这是因为.NET运行时使用的是PowerShell进程的当前工作目录,而不是powershell shell中的当前位置。

演示:

# C:\temp> [System.IO.Directory]::SetCurrentDirectory("c:\windows")

# C:\temp> [IO.DirectoryInfo]".\"

Mode                LastWriteTime     Length Name                                                                                  
----                -------------     ------ ----                                                                                  
d----         7/29/2014  10:44 AM            windows                                                                               

# C:\temp> [IO.DirectoryInfo]"$pwd"

Mode                LastWriteTime     Length Name                                                                                  
----                -------------     ------ ----                                                                                  
d----         7/23/2014   3:16 PM            temp 

要获取当前powershell位置的DirectoryInfo,只需使用get-item

# C:\temp> get-item ".\"

    Directory: C:\

Mode                LastWriteTime     Length Name                                                                                  
----                -------------     ------ ----                                                                                  
d----         7/23/2014   3:16 PM            temp

答案 1 :(得分:1)

看看这是否有助于解决您的问题

[IO.DirectoryInfo](Resolve-Path ".\").Path