Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Foreach循环中使用对象的值数组_Arrays_Powershell_Foreach - Fatal编程技术网

Arrays 在Foreach循环中使用对象的值数组

Arrays 在Foreach循环中使用对象的值数组,arrays,powershell,foreach,Arrays,Powershell,Foreach,我似乎找不到任何关于在foreach循环中使用对象的一个属性值的信息(如果不将整个对象放入循环中) 我首先创建一个名为UFGet Servers的函数,该函数使用Get ADComputer并返回环境中特定OU中的服务器名称,然后将它们放置在一个数组中。这很好,只是当我在foreach循环中使用数组时,它捕获的每个对象都有@[Name=serverName],我无法以任何有用的方式使用它。以下伪代码是一个简化示例: foreach($Computer in $ComputerNames){do

我似乎找不到任何关于在foreach循环中使用对象的一个属性值的信息(如果不将整个对象放入循环中)

我首先创建一个名为UFGet Servers的函数,该函数使用Get ADComputer并返回环境中特定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循环,而在于字符串格式。我知道有两种方法可以满足你的需要。首先是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,所以这真的很有帮助。整个脚本现在可以工作了(这是一个更大的脚本的最后一个问题部分)。