powershell - Powershell.exe 和 Powershell ISE 之间的代码工作方式略有不同 - 对象排序行为
问题描述
我有一些代码可以从 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 和“标准”之间存在如此大的差异?提前致谢!虽然这可能是新手问题,但我没有找到 - 或理解 - 差异的原因。
解决方案
为了补充乔丹的有用答案,它解决了您的具体问题:
如前所述,Sort-Object
悄悄地接受不存在的属性来排序。
不幸的是,从 Windows PowerShell v5.1 开始,尝试按不存在的属性排序会导致看似随机的输出顺序:
WinPS> 1, 2, 3, 4 | Sort-Object -Property Foo
3
4
1
2
幸运的是,这个问题已在 PowerShell Core中得到修复,在这种情况下输入顺序得以保留。
推荐阅读
- html - Flexbox 忽略 justify-content、align-content 等以消除子元素之间的间隙
- dataflow-diagram - 数据流图(DFD)建模疑惑
- javascript - 在 React 组件中将 Css 类加载为字符串
- c# - 当端口作为 HTTP 访问时,Bouncy Castle 的 TlsServerProtocol.Accept() 挂起
- python - 从现在开始获取“几小时前”的日期
- java - RecyclerView 在不同的活动中将项目添加到我的数组列表并更新 recyclerview.adapter
- java - 如何在 Spring Boot 应用程序中为 @Scheduled cronjob 编写集成测试?
- python - 跳线?聊天室应用程序中的线程问题
- linux - 在 snmp 中为我的扩展 OID 设置一个值
- python - 如何使用 Python 以更快的方式将 csv 文件加载到 Oracle 表中