PowerShell输出差异

PowerShell输出差异,powershell,Powershell,在powershell上编写命令时,输出有时以一种方式传播,有时以另一种方式传播。 假设我正在使用命令 Get-ADUser -Filter * | ? {$_.name -eq "$name"} 在这种情况下,我可以使用如下所示的Where Object,有时会有命令以其他方式填充结果,并且由于某种原因Where Object不起作用 经过一点调查,我发现对于运行的另一个命令,selectstring将适用于我,而不是Where对象 所以我想知道这两种输出之间的区别是什么 多谢各位 顺便说一

在powershell上编写命令时,输出有时以一种方式传播,有时以另一种方式传播。 假设我正在使用命令

Get-ADUser -Filter * | ? {$_.name -eq "$name"}
在这种情况下,我可以使用如下所示的
Where Object
,有时会有命令以其他方式填充结果,并且由于某种原因
Where Object
不起作用

经过一点调查,我发现对于运行的另一个命令,
selectstring
将适用于我,而不是
Where对象

所以我想知道这两种输出之间的区别是什么

多谢各位


顺便说一下,如果有人有一个很好的学习网站,可以从更内部的角度教我所有powershell的基础知识,比如数组和哈希表之间的区别,我已经知道了,不是很基本的东西:)

其中Object
处理返回与给定条件匹配的对象的对象集合<代码>选择字符串处理返回与给定表达式匹配的字符串的字符串集合。它们的相似之处在于,它们允许您过滤一组内容。你可以过滤其中一个的东西和另一个有点不同。其中对象可以基于字符串属性或转换为字符串的属性筛选对象。它还可以使用数学运算符(大于、小于、模数等)对数值特性、对象比较等应用过滤器

假设我有一个名为
.gitignore
的文件。如果我想看到包含短语“paket”的行,我会这样写:

cat .gitignore | select-string 'paket'
选择字符串为我找到一行或多行包含我要查找的短语的行。我可以用
Where Object做同样的事情

cat .gitignore | where { $_ -like '*paket*' }
在这种情况下,被过滤的对象恰好是一个字符串,因此
Select string
Where object
看起来非常相似

现在,让我们创建一个日期列表

$stuff = 1..10 | foreach { $(Get-Date).AddHours($(Get-Random -Minimum 1 -Maximum 25) * -1) }
我们将按小时筛选日期列表,其中小时数大于18(下午6点):

在本例中,我们将数学表达式(大于)应用于对象的属性。这是
Select String
无法做到的<代码>其中对象也将处理不转换为字符串的值


希望这有点帮助。

其中Object
处理返回符合给定条件的对象的对象集合<代码>选择字符串处理返回与给定表达式匹配的字符串的字符串集合。它们的相似之处在于,它们允许您过滤一组内容。你可以过滤其中一个的东西和另一个有点不同。其中对象可以基于字符串属性或转换为字符串的属性筛选对象。它还可以使用数学运算符(大于、小于、模数等)对数值特性、对象比较等应用过滤器

假设我有一个名为
.gitignore
的文件。如果我想看到包含短语“paket”的行,我会这样写:

cat .gitignore | select-string 'paket'
选择字符串为我找到一行或多行包含我要查找的短语的行。我可以用
Where Object做同样的事情

cat .gitignore | where { $_ -like '*paket*' }
在这种情况下,被过滤的对象恰好是一个字符串,因此
Select string
Where object
看起来非常相似

现在,让我们创建一个日期列表

$stuff = 1..10 | foreach { $(Get-Date).AddHours($(Get-Random -Minimum 1 -Maximum 25) * -1) }
我们将按小时筛选日期列表,其中小时数大于18(下午6点):

在本例中,我们将数学表达式(大于)应用于对象的属性。这是
Select String
无法做到的<代码>其中对象也将处理不转换为字符串的值

希望这有点帮助。

好的, 显然,我还设法使用Where对象来过滤命令结果。 这是因为我的结果是每行有3个字符串,所以使用“-eq”不起作用,给我一个空白结果。 我将其更改为-match或-like**并且它确实找到了包含我要查找的字符串的

为了进一步说明,我使用的命令是“netusers/domain”-它以每行3个字符串输出结果

谢谢你的回答:)

好的, 显然,我还设法使用Where对象来过滤命令结果。 这是因为我的结果是每行有3个字符串,所以使用“-eq”不起作用,给我一个空白结果。 我将其更改为-match或-like**并且它确实找到了包含我要查找的字符串的

为了进一步说明,我使用的命令是“netusers/domain”-它以每行3个字符串输出结果


因此,感谢您的回答:)

您能否提供一个可复制的命令示例,您不能使用
Where Object
,但Where
Select String
似乎是由于这个技巧造成的?嗯。。。显然,我在命令上也使用了Where Object,这是我以前无法使用的:)你能提供一个可复制的命令示例吗?你不能使用Where Object,但Where
Select String
似乎是由于这个技巧造成的?嗯。。。显然,我在命令上也使用了Where对象,这是我以前无法做到的:)首先感谢您的澄清,这基本上是我需要知道的。但是有一行脚本我不太懂:$stuff=1..10 | foreach{$(Get Date).AddHours($(Get Random-Minimum 1-Maximum 25)*-1)}我知道如何使用foreach和变量,但是你能解释一下那一行:$(Get Date).AddHours($(Get Random-Minimum 1-maximust 25)*-1)*为什么在命令之前添加$?*在powershell中,*符号是什么意思?非常感谢。显然,出于某种原因,我无法执行换行操作,对此我深表歉意:(星号(*)是Powershell中的乘法运算符。带美元符号和括号的位是子表达式