0

我一直在努力从这里扩展 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。现在它坏了。

当我打电话说那个时Invoke,我一直收到错误消息。但是,注释掉底部的 for 循环并手动指定单台计算机可以使脚本正确执行。重新添加 for 循环并添加一行以在调用上面的行之前打印出的值会导致它在每个错误之前正确地打印每个机器名称。$members = @($group.psbase.Invoke("Members"))The network path was not found$ComputerNameInvokehosts.txt

在函数调用中手动指定而不是使用 foreach 循环时,hosts.txt 中的所有机器都是可 ping 的并且工作正常。

任何想法为什么这一直在我身上死去或如何解决它?

谢谢!

4

2 回答 2

2

只是为了测试。

尝试使用以下命令在 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;
};
于 2013-05-29T18:40:38.730 回答
1

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

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

function global:Get-LocalGroupMembership {

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

于 2013-05-30T13:55:01.077 回答