完整的Powershell和脚本编写菜鸟-我什至不了解危险。我需要查询域中的所有PC,以确定它们的本地Administrators组成员身份是什么,并将该输出发送到text / csv文件。
我已经尝试了很多类似的事情:
Import-Module -Name ActiveDirectory
Get-ADComputer -filter * |
Foreach-Object {
invoke-command {net localgroup administrators} -EA silentlyContinue |
} |
Out-File c:\users\ftcadmin\test.txt
这使我重复了相同的列表,但似乎影响了每台域PC。我猜它实际上并没有在远程PC上运行。还尝试了:
$computers = Get-Content -Path c:\users\ftcadmin\computers.txt
invoke-command {net localgroup administrators} -cn $computers -EA silentlyContinue
Get-Process | Out-File c:\users\ftcadmin\test.txt
它受computer.txt文件中PC的预定列表的限制。我尝试的第三件事是:
$a = Get-Content "C:\users\ftcadmin\computers.txt"
Start-Transcript -path C:\users\ftcadmin\output.txt -append
foreach ($i in $a)
{ $i + "`n" + "===="; net localgroup "Administrators"}
Stop-Transcript
除了输出只是
computername1
====
computername2
====
等等,但没有列出小组成员。
社区有什么想法吗?
最佳答案
将此函数复制并粘贴到PowerShell控制台中。
function Get-LocalGroupMember
{
[CmdletBinding()]
param
(
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$Name,
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$ComputerName = 'localhost',
[Parameter()]
[ValidateNotNullOrEmpty()]
[pscredential]$Credential
)
process
{
try
{
$params = @{
'ComputerName' = $ComputerName
}
if ($PSBoundParameters.ContainsKey('Credential'))
{
$params.Credential = $Credential
}
$sb = {
$group = [ADSI]"WinNT://./$using:Name"
@($group.Invoke("Members")) | foreach {
$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
}
}
Invoke-Command @params -ScriptBlock $sb
}
catch
{
Write-Error $_.Exception.Message
}
}
}
然后,尝试使用它:
Get-ADComputer -filter * | foreach {Get-LocalGroupMember -Name 'Administrators' -ComputerName $_.Name }
如果您想进行某种格式化,则可以获取计算机列表,并将所有成员放在每台计算机旁边。
Get-ADComputer -filter * | foreach {
$members = Get-LocalGroupMember -Name 'Administrators' -ComputerName $_.Name
[pscustomobject]@{
'ComputerName' = $_.Name
'Members' = $members
}
}
这至少需要PowerShell v3。如果没有,我仍然强烈建议您升级到PowerShell v4。
关于powershell - 列出所有域计算机上的本地管理员组成员身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898423/