我一直在努力从这里扩展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循环时工作正常。
为什么这会让我不知所措或如何解决这个问题?
谢谢!
答案 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 {
现在像魅力一样工作。感谢您提供的所有帮助。