升级到PowerShell 3后脚本崩溃了

时间:2013-05-29 17:56:01

标签: powershell wmi

我一直在努力从这里扩展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$members = @($group.psbase.Invoke("Members"))The network path was not found$ComputerName时,我一直收到错误消息。但是,在底部注释掉for循环并手动指定单个计算机可以使脚本正确执行。重新添加for循环并添加一行以在调用Invoke行之前打印出hosts.txt的值,这会导致它在每次错误之前正确地从{{1}}正确打印每个计算机名称。

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

为什么这会让我不知所措或如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:2)

只是为了测试。

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

PS> PowerShell -Version 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;
};

答案 1 :(得分:1)

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

我只是更改了function Get-LocalGroupMembership {

,而不是更改该问题中提到的任何变量

function global:Get-LocalGroupMembership {

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