我在参数验证中广泛使用[IO.DirectoryInfo],结果证明这是非常非常糟糕的事情。
见这里:
PS C:\pathsuppressed>> echo ([IO.DirectoryInfo]".\")
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 29.7.2014 17:06 Desktop
无论我目前的目录是什么,它都声明我在桌面上。真的?
这样做的正确方法是什么?我可以使用什么“类型”来标记参数是PowerShell脚本中的路径?
附录:
似乎PowerShell联系'。'在shell启动时到某个目录,而不是我当前的目录。这种想法背后可能是什么? (微软善于为PowerShell异常找借口)
答案 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