【发布时间】:2013-05-30 21:55:01
【问题描述】:
我一直在努力从这里扩展 powershell 脚本:
http://gallery.technet.microsoft.com/scriptcenter/Get-LocalGroupMembership-87d10dd8
我在底部添加了以下内容,让它在文本文件中循环机器并调用该函数。
$machines = get-content -LiteralPath C:\scripts\hosts.txt
foreach ($ComputerName in $machines) {
get-localgroupmembership -ComputerName $ComputerName
}
它工作正常,但后来我升级到 Powershell 3,以便我可以将 -append 标志用于 export-csv。现在它坏了。
当我在$members = @($group.psbase.Invoke("Members")) 上调用Invoke 并说The network path was not found 时,我不断收到错误消息。但是,注释掉底部的 for 循环并手动指定单台计算机可以让脚本正确执行。在调用上面的 Invoke 行之前添加 for 循环并添加一行以打印出 $ComputerName 的值会导致它在每个错误之前正确地从 hosts.txt 正确打印每个机器名称。
hosts.txt 中的所有机器都是可 ping 的,并且在函数调用中手动指定而不是使用 foreach 循环时可以正常工作。
任何想法为什么这一直在我身上死去或如何解决它?
谢谢!
【问题讨论】:
-
也许这是一个愚蠢的问题,但您是否确定了它反对哪一行并验证拼写并尝试替代规范?
-
错误引用了我上面引用的行。拼写正确。正如我所提到的,它工作得非常好(除了所需的附加)。然后唯一改变的是升级到 PS 3.0。之后它不再起作用了。此外,手动指定一台机器而不是循环遍历文本文件仍然可以正常工作。替代规范,例如?我对 powershell 完全陌生。
-
我的意思是,您是否有 powershell parrot 回复您它认为的网络路径。由于您更新了语言和支持系统,因此它可能对您的输入的解释与以前不同,也可能与您的假设不同。
-
对不起。我虽然涵盖了这一点。是的,在进行有问题的调用之前,我让它从函数中打印出变量,以验证它是否正确地从文本文件中读取每个机器名称。我还一次手动指定了一台机器,它运行得很好。
标签: powershell wmi