如何用Where-Object编写powershell脚本

本文关键字:powershell 脚本 编写 Where-Object 何用 | 更新日期: 2023-09-27 18:05:04

给定如下脚本:

Get-ADPermission -Identity "Mark Adam" | where {$._ExtendedRights -like "*Send-As*"} -and -not {$_.Users -like "NT AUTHORITY'SELF"}

到目前为止,我还是没有运气。

var CommandGetAdPermission = new Command("Get-ADPermission");
CommandGetAdPermission.Parameters.Add("Identity", Identity);       
var CommandWhere = new Command("Where-Object");
ScriptBlock filter = ScriptBlock.Create("{$_.ExtendedRights -like '"*Send-As*'"} -and -not {$_.User -like '"NT AUTHORITY''SELF'"}");
CommandWhere.Parameters.Add("FilterScript", filter);
pipeline.Commands.Add(CommandGetAdPermission);
pipeline.Commands.Add(CommandWhere);                     
psh = pipeline.Invoke();
errors = ps.Streams.Error.ReadAll();

返回如下错误:

术语'Where-Object'不被识别为cmlet的名称,函数、脚本文件或可操作程序。检查单词的拼写名称,或者如果包含路径,则验证路径是否正确再试一次。

我做错了什么吗?

如何用Where-Object编写powershell脚本

你的语法错误。在复杂过滤(即多个条件)的情况下,你想把整个过滤条件放在脚本块中,像这样:

Get-ADPermission -Identity "Mark Adam" | Where-Object {$_.ExtendedRights -like "*Send-As*" -and $_.Users -notlike "NT AUTHORITY'SELF"}

还有一个错别字

$._ExtendedRights 

而必须是

$_.ExtendedRights