Arrays 在Foreach循环中使用对象的值数组
我似乎找不到任何关于在foreach循环中使用对象的一个属性值的信息(如果不将整个对象放入循环中) 我首先创建一个名为UFGet Servers的函数,该函数使用Get ADComputer并返回环境中特定OU中的服务器名称,然后将它们放置在一个数组中。这很好,只是当我在foreach循环中使用数组时,它捕获的每个对象都有@[Name=serverName],我无法以任何有用的方式使用它。以下伪代码是一个简化示例:Arrays 在Foreach循环中使用对象的值数组,arrays,powershell,foreach,Arrays,Powershell,Foreach,我似乎找不到任何关于在foreach循环中使用对象的一个属性值的信息(如果不将整个对象放入循环中) 我首先创建一个名为UFGet Servers的函数,该函数使用Get ADComputer并返回环境中特定OU中的服务器名称,然后将它们放置在一个数组中。这很好,只是当我在foreach循环中使用数组时,它捕获的每个对象都有@[Name=serverName],我无法以任何有用的方式使用它。以下伪代码是一个简化示例: foreach($Computer in $ComputerNames){do
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循环,而在于字符串格式。我知道有两种方法可以满足你的需要。首先是string格式化,允许您使用
{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$"
}
听起来您的函数实际上返回的是哈希表数组而不是字符串数组。请尝试引用
$Computer.Name
或$Computer.Item('Name')
或$Computer['Name']
。我最喜欢后一个选项。谢谢!像这样的新东西我必须存在,但坦率地说,我是一个noob,所以这真的很有帮助。整个脚本现在可以工作了(这是一个更大的脚本的最后一个问题部分)。