【发布时间】:2014-07-31 14:19:15
【问题描述】:
我在参数验证中广泛使用 [IO.DirectoryInfo],结果证明这是一件非常非常糟糕的事情。
看这里:
PS C:\pathsuppressed>> echo ([IO.DirectoryInfo]".\")
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 29.7.2014 17:06 Desktop
无论我当前的目录是什么,它都表明我在桌面。真的吗?
做同样事情的正确方法是什么?我可以使用什么“类型”来标记参数是 PowerShell 脚本中的路径?
附录:
似乎 PowerShell 关系 '.'到某个目录,在 shell 启动时,而不是我目前所在的目录。这种想法的背后可能是什么? (微软擅长为 PowerShell 异常找借口)
【问题讨论】:
-
[Environment]::CurrentDirectory的值是多少? -
这里好像是C:\Windows\system32
-
好的,zdan 有它的症结所在。 Powershell 正在对一个字符串进行默认转换,该字符串调用
DirectoryInfo的构造函数,该构造函数接受一个字符串,并将路径传递给Path.GetFullPath,它使用Environment.CurrentDirectory表示'。'因为它对powershell一无所知。
标签: .net powershell powershell-2.0