在 Foreach 循环中使用对象值数组
Use Array of Values of Object in a Foreach Loop
我似乎找不到任何有关在 foreach 循环中使用对象的一个属性的 值 的信息(没有将整个对象放入循环中)。
我首先创建一个名为 UFGet-Servers 的函数,它使用 Get-ADComputer 和 returns 我环境中特定 OU 中的服务器名称,并将它们放在一个数组中。这很好,除了当我在 foreach 循环中使用数组时,它获取的每个对象中都有 @[Name=serverName] ,我无法以任何有用的方式使用它。下面的伪代码是一个简化的例子:
foreach($Computer in $ComputerNames){do code... code is adding the server name into a UNC path such as "\$Computer\C$\"}
上面的问题是您不能将整个对象添加到路径中——它最终看起来像“\@[Name=serverNameHere]\C$\”,完全炸毁了。如何摆脱“@[property=”部分,并简单地将值用作循环中的 $Computer?
真正让我感到奇怪的是,我在任何地方都找不到关于这方面的直截了当的文章……本以为每个人和他们的妈妈都会想做这样的事情。
因此,您的问题不在于 ForEach 循环,而在于字符串格式。我知道有两种方法可以满足您的需求。首先是字符串格式化,它允许您使用 {0}
m {1}
等将值注入字符串,前提是您在字符串后面加上 -f 和所述值的列表。如:
ForEach($Computer in $ComputerNames){
"The Server Path is \{0}\Share$" -f $Computer.Name
}
第二种方式是子表达式(如果我在那里使用了错误的术语,我相信有人会纠正我)。这涉及在 $()
中包含变量和所需的 属性(或函数,或其他)。这将在评估字符串之前评估括号内的任何内容。看我的例子:
ForEach($Computer in $ComputerNames){
"The Server Path is \$($Computer.name)\Share$"
}
我似乎找不到任何有关在 foreach 循环中使用对象的一个属性的 值 的信息(没有将整个对象放入循环中)。
我首先创建一个名为 UFGet-Servers 的函数,它使用 Get-ADComputer 和 returns 我环境中特定 OU 中的服务器名称,并将它们放在一个数组中。这很好,除了当我在 foreach 循环中使用数组时,它获取的每个对象中都有 @[Name=serverName] ,我无法以任何有用的方式使用它。下面的伪代码是一个简化的例子:
foreach($Computer in $ComputerNames){do code... code is adding the server name into a UNC path such as "\$Computer\C$\"}
上面的问题是您不能将整个对象添加到路径中——它最终看起来像“\@[Name=serverNameHere]\C$\”,完全炸毁了。如何摆脱“@[property=”部分,并简单地将值用作循环中的 $Computer?
真正让我感到奇怪的是,我在任何地方都找不到关于这方面的直截了当的文章……本以为每个人和他们的妈妈都会想做这样的事情。
因此,您的问题不在于 ForEach 循环,而在于字符串格式。我知道有两种方法可以满足您的需求。首先是字符串格式化,它允许您使用 {0}
m {1}
等将值注入字符串,前提是您在字符串后面加上 -f 和所述值的列表。如:
ForEach($Computer in $ComputerNames){
"The Server Path is \{0}\Share$" -f $Computer.Name
}
第二种方式是子表达式(如果我在那里使用了错误的术语,我相信有人会纠正我)。这涉及在 $()
中包含变量和所需的 属性(或函数,或其他)。这将在评估字符串之前评估括号内的任何内容。看我的例子:
ForEach($Computer in $ComputerNames){
"The Server Path is \$($Computer.name)\Share$"
}