有人可以向我解释为什么以下工作
$Users = 'First1 Last1','First2 Last2','First3 Last3'
foreach ($User in $Users)
{
(Get-ADUser -Filter *).Where{$_.Name -like "*$User*"}
}
但这不是
$Users | % { (Get-ADUser -Filter *).Where{$_.Name -like "*$_*"} }
我觉得它基本上完全相同,但第一个命令返回数据而第二个命令没有
答案 0 :(得分:1)
这不是一回事,因为.Where{$_.Name -like "*$_*"}
使用当前对象变量两次。在$_.Name
中它应该引用Get-ADUser
中的当前对象,而在"*$_*"
中它应该引用来自$Users
的当前字符串,但实际上也引用来自Get-ADUser
的当前对象$Users | % { $u = $_; (Get-ADUser -Filter *).Where{$_.Name -like "*$u*"} }
。
这样的话会使两个陈述相同:
Coordinates xy
答案 1 :(得分:1)
在第二个循环中,变量$_
开始成为$Users
数组的第一个用户,但它被Get-ADUser
的输出覆盖。
换句话说,在{$_.Name -like "*$_*"}
*$_*
中的第二个循环中,您认为它等同于$User
,而不是private void btnAddItems_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Names|*.txt";
if(ofd.ShowDialog() == DialogResult.OK)
{
string[] recipients = File.ReadAllLines(ofd.FileName);
foreach(string name in recipients)
{
lvRecipient.Items.Add(name);
//increment the number of items in the list
foreach(int item in lvRecipient.Items)
{
int i = 0;
i++;
lbCount.Text = i.ToString();
}
}
}
。