我需要从特定的服务器列表中报告本地组和成员。我有以下脚本,我从其他脚本拼凑而成。运行脚本时,它会写入要查询的服务器的名称以及服务器的本地组名称以及这些组的成员。我想将文本输出到文件,但我在哪里添加| Out-File命令我收到错误"不允许空管元素"。我对此脚本的第二个顾虑是,在输出到文件时,我选择报告的方法将被查询的服务器工作。请帮忙纠正这个新手脚本错误吗?
$server=Get-Content "C:\Powershell\Local Groups\Test.txt"
Foreach ($server in $server)
{
$computer = [ADSI]"WinNT://$server,computer"
"
"
write-host "==========================="
write-host "Server: $server"
write-host "==========================="
"
"
$computer.psbase.children | where { $_.psbase.schemaClassName -eq 'group' } | foreach {
write-host $_.name
write-host "------"
$group =[ADSI]$_.psbase.Path
$group.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
write-host **
write-host
}
}
谢谢, 凯文
答案 0 :(得分:0)
您说您正在使用Out-File
并收到该错误。你不会在你的代码中显示show_where_。
考虑到代码,你最好的猜测就是你正在尝试这样的事情
Foreach ($server in $server){
# All the code in this block
} | Out-File c:\pathto.txt
我希望我有这个解释的技术参考,但是我没有找到一个(认为它与较旧的PowerShell版本有关)。根据我的经验,没有从该构造传递的标准输出。旁边($server in $server)
即使有效也会产生误导。我可能会建议这个小小的改变让我知道这是否有效。
$servers=Get-Content "C:\Powershell\Local Groups\Test.txt"
$servers | ForEach-Object{
$server = $_
# Rest of code inside block stays the same
} | Out-File c:\pathto.txt
如果那不是你的速度,那么我还会考虑在块外构建一个空数组,并为每个循环传递填充。
# Declare empty array to hold results
$results = @()
Foreach ($server in $server){
# Code before this line
$results += $group.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
# Code after this line
}
$results | Set-Content c:\pathto.txt
值得注意
您正在将控制台输出与标准输出混合。根据您要对脚本执行的操作,您将无法获得预期的相同输出。如果您希望write-host "Server: $server"
之类的行位于输出文件中,则需要使用Write-Output