小编imm*_*le2的帖子

PowerShell 选择对象:使用 -Unique 与第一个/最后一个/跳过/索引

我只是好奇我是否缺少任何文档,或者是否有不同/更好的方法来做到这一点,从而不需要文档。也许我是唯一一个尝试从一组数据中Select-Object选择唯一实例的人。-First X

根据下面的测试,看起来Select-Object-Unique开关和某种类型的限制器(FirstLastSkipIndex等)一起使用本质上会导致在删除重复项之前应用限制器。这在概念上对我来说没有意义,而且似乎也没有记录在案。

我对这个糟糕的例子表示歉意,但考虑一个包含 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)

powershell unique select-object

4
推荐指数
1
解决办法
1938
查看次数

将 .ps1 转换为 .bat 不会导致 cmd.exe 达到最大字符长度 - 但为什么呢?

根据相关问题和一些谷歌搜索/测试,很明显命令行的最大长度cmd.exe8,191字符。然而......我的脚本似乎成功地超过了这个长度,我不明白它为什么有效。

所以我有:

  • 编写/保存为的脚本.ps1
  • 我正在使用将 PowerShell 转换为批处理中的方法将其转换为.bat
  • 如果我运行.bat- 似乎没有任何问题
  • 如果我尝试回显该命令或在运行之前$encoded删除- 很容易看到 的长度/内容已被截断...但它按预期工作@echo off.bat$encoded

我意识到这是一个有点奇怪的问题,因为我试图确定一些关于有效的东西与坏的东西的隐藏真相,但我想了解它为什么有效!

注意: 我为脚本创建 的主要原因.bat是因为我有许多小“程序”,需要在工作计算机上运行并与其他人共享。我们公司的执行策略不允许运行脚本,如果它是 a ,其他人使用我写的东西会更容易,.bat因为他们不需要理解/使用PowerShell. 他们只需将其放置.bat在正确的位置,单击两次,然后坐下来放松,直到发生事情。

编辑:这是窗口中被截断的命令cmd.exe。如果我从 Base64 转换回可读文本,它显然会丢失大约一半的脚本。然而 - 我没有注意到任何问题 截断命令

windows powershell cmd batch-file

3
推荐指数
1
解决办法
445
查看次数

静态方法/属性可以保存为 PowerShell 对象吗?

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

powershell

2
推荐指数
1
解决办法
75
查看次数

标签 统计

powershell ×3

batch-file ×1

cmd ×1

select-object ×1

unique ×1

windows ×1