【问题标题】:script broke after upgrading to powershell 3升级到 powershell 3 后脚本中断
【发布时间】: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


【解决方案1】:

只是为了测试。

尝试使用以下命令在 PowerShell V2.0 下运行脚本:

PS> PowerShell -2.0 版

当提示改变时再试一次。看看它是否有效。

我加载了 PowerShell 3.0,它工作正常。这是脚本:

$machines = get-content -LiteralPath C:\temp\hosts.txt;

foreach ($ComputerName in $machines) {
    Get-LocalGroupMembership -ComputerName $ComputerName  `
    | Export-Csv -Path c:\temp\testadmin.csv -NoClobber `
          -NoTypeInformation -Append;
};

【讨论】:

  • 我有几乎完全相同的东西。我试过有和没有;。在这一点上,我只是想让脚本运行并再次输出到屏幕,所以我现在没有任何 export-csv 部分了。除此之外,我的脚本看起来完全一样,但在手动指定的 PS 1、2 和 3 中仍然失败。
  • 现在这很奇怪。当我从 ISE 中运行该脚本时,它运行得很好。但是从 cmd 或 PS 调用它失败了。
  • 我搞定了。问题是我需要将我的功能设置为全局。 stackoverflow.com/questions/16070633/… 的解释解释了我在 ISE 但不是 CLI 中看到的行为。我没有更改任何变量,而是将“函数 Get-LocalGroupMembership”更改为“函数 global:Get-LocalGroupMembership”。现在工作就像一个魅力。由于问题最终变得完全不同,我该如何说谢谢并向你们所有人提供道具而不将不相关的答案标记为正确?谢谢
【解决方案2】:

我让它工作了。问题是我需要将我的功能设置为全局。 this stackexchange question 的解释解释了我在 ISE 但不是 CLI 中看到的行为。

我没有更改该问题中提到的任何变量,而是更改了function Get-LocalGroupMembership {

function global:Get-LocalGroupMembership {

现在工作就像一个魅力。不过,感谢您提供的所有帮助。

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    相关资源
    最近更新 更多