我只是好奇我是否缺少任何文档,或者是否有不同/更好的方法来做到这一点,从而不需要文档。也许我是唯一一个尝试从一组数据中Select-Object选择唯一实例的人。-First X
根据下面的测试,看起来Select-Object与-Unique开关和某种类型的限制器(First、Last、Skip、Index等)一起使用本质上会导致在删除重复项之前应用限制器。这在概念上对我来说没有意义,而且似乎也没有记录在案。
我对这个糟糕的例子表示歉意,但考虑一个包含 20 个项目的数组,每个项目出现两次:
PS > $array = @() ; 1..10 | % { $array += $_ ; $array += $_ }
PS > $array -Join ','
1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10 ##Displaying the array on a single comma separated line
Run Code Online (Sandbox Code Playgroud)
假设有人给了你$array,但你最多只能处理 5 个对象的输入。过滤给你的内容,你可能会想使用Select-Object. 一开始你最终得到了 5 个对象,但是有重复的对象,所以你很快就想了想,只需添加开关-Unique,然后你就会意识到输出仍然不太正确。
PS > ($array | Select-Object -First 5) -Join ','
1,1,2,2,3 ##5 objects as expected, …Run Code Online (Sandbox Code Playgroud) 根据相关问题和一些谷歌搜索/测试,很明显命令行的最大长度cmd.exe是8,191字符。然而......我的脚本似乎成功地超过了这个长度,我不明白它为什么有效。
所以我有:
.ps1.bat.bat- 似乎没有任何问题$encoded删除- 很容易看到 的长度/内容已被截断...但它按预期工作@echo off.bat$encoded我意识到这是一个有点奇怪的问题,因为我试图确定一些关于有效的东西与坏的东西的隐藏真相,但我想了解它为什么有效!
注意:
我为脚本创建 的主要原因.bat是因为我有许多小“程序”,需要在工作计算机上运行并与其他人共享。我们公司的执行策略不允许运行脚本,如果它是 a ,其他人使用我写的东西会更容易,.bat因为他们不需要理解/使用PowerShell. 他们只需将其放置.bat在正确的位置,单击两次,然后坐下来放松,直到发生事情。
编辑:这是窗口中被截断的命令cmd.exe。如果我从 Base64 转换回可读文本,它显然会丢失大约一半的脚本。然而 - 我没有注意到任何问题

是否可以执行类似的操作$test = [string]::IsNullOrWhiteSpace,然后检查 a 是否$var为 Null/Empty/WhiteSpace $test?我不仅仅是询问该静态方法的具体情况,而且一般来说,我见过人们将一个对象分配给一个变量,然后在不输入其全名的情况下对该对象执行操作,我想知道是否可以使用类似的语法字符串方法或任何方法。