繁体   English   中英

Powershell.exe和Powershell ISE之间的代码工作方式略有不同 - 排序对象行为

[英]Code working a bit differently between Powershell.exe and Powershell ISE - Sort-Object behavior

我有一些代码来从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中运行时(例如,通过右键单击启动.ps1文件和“使用Powershell运行”),我将下载最旧的文件。 当我在Powershell ISE上面运行时,我得到了最新的文件。 当我在Powershell.exe中更改-Last到-First时,代码按预期工作。

我可以很容易地改变这一点,但由于我对Powershell很新 - 为什么Powershell ISE和“标准”之间存在这样的差异? 提前致谢! 虽然这可能是菜鸟问题,但我没有找到 - 或理解 - 差异的原因。

为了补充乔丹的有用答案 ,它可以解决您的具体问题:

如上所述, Sort-Object 悄悄接受不存在的属性进行排序

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

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

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

链接对象没有“名称”属性,因此按名称排序将不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM