我似乎无法找到关于在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?
真正令我感到奇怪的是,我无法在任何地方找到一篇简明扼要的文章...会想到每个人和他们的妈妈都想做这样的事情。
答案 0 :(得分:2)
因此,您的问题不在于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$"
}