Windows 8.1 Enterprise
$PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
这是我所看到的。我有一个文件" commands2.txt"在子目录" level2"。为简单起见,它是"测试"中的唯一文件。结构体。 完整路径c:\ users \ chris \ testing \ level2 \ commands2.txt
设置 从c:\ users \ chris \ testing作为当前目录。
$stuff = gci c:\users\chris\testing\ -Recurse command*.txt
$stuff2 = gci c:\users\chris\testing\* -Recurse command*.txt
现在,
get-item $stuff
返回" get-item:找不到路径' C:\ Users \ chris \ testing \ commands2.txt'因为它不存在。"注意" level2"不见了。看起来它只是将.Name附加到当前路径。
但是
get-item $stuff2
返回完整路径文件的get项的预期结果。
奇怪吧?所以我在这里感到困惑。
Compare-Object $stuff $stuff2
显示它们不同。
InputObject SideIndicator
----------- -------------
C:\users\chris\testing\level2\commands2.txt =>
commands2.txt <=
可是:
$a = $stuff | select *
$b = $stuff2 | select *
compare-object $a $b -includeEqual
显示它们是相同的。 我知道我可以通过放置&#34; *&#34;来解决这个问题。在路上。
但为什么变量不同,我该怎么说?
为什么InputObject不同?
有没有办法看到两个变量$ stuff和$ stuff2之间的区别?
更新:Vesper基本上钉了它。使用get-childitem和tostring搜索此处返回了有用的问题。我似乎是其他一些变种。 Mysterious different conversion to string[] of seemingly same input data显示了最新情况。此外,2010年还有一个错误报告:https://connect.microsoft.com/PowerShell/feedback/details/556004/get-childitem-gets-fileinfo-constructed-in-different-ways-depending-on-parameters 基于之前的链接。好时光。
答案 0 :(得分:0)
差异非常微妙,您可以通过toString()
结果区分它们。
PS > $stuff.toString()
commands2.txt
PS > $stuff2.toString()
C:\users\chris\testing\level2\commands2.txt
Threre是MSDN here上的一些数据,表明toString()
不会始终返回文件的全名。你好像遇到了这个问题。我说这是一个错误,但有一种方法可以通过查询toString()
并检查fullName
来查找错误是否已触发。
if ($stuff.toString() -ne $stuff.fullName) { Write-Host "Bug!" }