我有一些代码可以从http网页获取超链接-查找符合条件的所有项目,然后通过对它们进行排序找到最新的项目,并将其InnerText用作下载源。所有超链接的名称末尾都分配有一个7位数的编号,对于较新的文件,此编号更大。

码:

$Web = ((Invoke-WebRequest "http://serveraddress/Export/").Links |
         Where-Object {$_.href -like “xx_yyyyyy_auto_standard*”} |
           Sort Name –Desc | Select –Last 1).innertext
Start-BitsTransfer -Source http://serveraddress/Export/$Web -Destination C:\autoreports\

现在,当我在Powershell.exe中以上述方式运行时(例如,通过右键单击并使用“运行Powershell运行”来启动.ps1文件时),我将下载最早的文件。当我在Powershell ISE中运行以上命令时,会得到最新文件。当我在Powershell.exe中将-Last更改为-First时,代码按预期工作。

我可以很容易地更改它,但是由于我对Powershell还是很陌生-为什么Powershell ISE与“标准”之间会有这种区别?提前致谢!尽管这可能是菜鸟问题,但我没有找到或理解差异的原因。

最佳答案

为了补充Jordan's helpful answer,它可以解决您的特定问题:

如前所述, Sort-Object安静地接受不存在的属性,以按进行排序。

不幸的是,从Windows PowerShell v5.1开始,尝试按不存在的属性进行排序会导致看似随机的输出顺序:

WinPS> 1, 2, 3, 4 | Sort-Object -Property Foo
3
4
1
2

幸运的是,此问题已在PowerShell Core中得到修复,在这种情况下,该位置的输入顺序得以保留。

关于powershell - Powershell.exe和Powershell ISE之间的代码工作方式略有不同-排序对象行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52319068/

10-08 22:36
查看更多