PowerShell输出差异
在powershell上编写命令时,输出有时以一种方式传播,有时以另一种方式传播。 假设我正在使用命令PowerShell输出差异,powershell,Powershell,在powershell上编写命令时,输出有时以一种方式传播,有时以另一种方式传播。 假设我正在使用命令 Get-ADUser -Filter * | ? {$_.name -eq "$name"} 在这种情况下,我可以使用如下所示的Where Object,有时会有命令以其他方式填充结果,并且由于某种原因Where Object不起作用 经过一点调查,我发现对于运行的另一个命令,selectstring将适用于我,而不是Where对象 所以我想知道这两种输出之间的区别是什么 多谢各位 顺便说一
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
,但WhereSelect String
似乎是由于这个技巧造成的?嗯。。。显然,我在命令上也使用了Where Object,这是我以前无法使用的:)你能提供一个可复制的命令示例吗?你不能使用Where Object,但WhereSelect 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中的乘法运算符。带美元符号和括号的位是子表达式