$Output = 'C:\temp\Result.txt'
$Servers = Get-Content 'C:\temp\ServerNames.txt'
$ScriptBlock = {
$Groups = Get-WmiObject Win32_GroupUser -ComputerName $Servers
$LocalAdmins = $Groups | Where GroupComponent –like '*"Administrators"'
$LocalAdmins |% {
$_.partcomponent –match ".+Domain\=(.+)\,Name\=(.+)$" > $nul
$matches[1].trim('"') + "\" + $matches[2].trim('"')
}
}
foreach ($ServerNames in $Servers) {
"Local Admin group members in $ServerNames" | Out-File $Output -Append
Invoke-command -ScriptBlock $ScriptBlock -ComputerName $ServerNames | Out- File $Output -Append
}
Я использую вышеупомянутый скрипт, чтобы заставить членов группы локальных администраторов работать на нескольких серверах, я получаю сообщение об ошибке -
Невозможно проверить аргумент параметра ComputerName. Аргумент равен нулю или пуст. Укажите аргумент, который не может быть пустым или пустым, а затем повторите команду. + CategoryInfo: InvalidData: (:) [Get-WmiObject], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft.PowerShell.Commands.GetWmiObjectCommand + PSComputerName: Computer
Не могли бы вы помочь мне исправить это ...?
Имена серверов в файле ServerNames.txt находятся в этом формате, указанном ниже -
$Output = 'C:\temp\Result.txt'
$Servers= Get-Content 'C:\temp\ServerNames.txt'
$ScriptBlock = {
$Groups = Get-WmiObject Win32_GroupUser -ComputerName $Using:ServerName
$LocalAdmins = $Groups | Where GroupComponent –like '*"Administrators"'
$LocalAdmins | ForEach-Object {
If($_.partcomponent –match ".+Domain\=(.+)\,Name\=(.+)$"){
$matches[1].trim('"') + "\" + $matches[2].trim('"')
}
}
}
ForEach ($ServerName in $Servers) {
"Local Admin group members in $ServerName" | Out-File $Output -Append
Invoke-command -ScriptBlock $ScriptBlock -ComputerName $ServerName | Out-File $Output -Append
}
Но ИМО это можно было бы немного упростить без ненужных варов
$Output = 'C:\temp\Result.txt'
$Servers= Get-Content 'C:\temp\ServerNames.txt'
$ScriptBlock = {
Get-WmiObject Win32_GroupUser -ComputerName $Using:ServerName |
Where GroupComponent –like '*"Administrators"'|
ForEach-Object {
If($_.partcomponent –match ".+Domain\=(.+)\,Name\=(.+)$"){
$matches[1].trim('"') + "\" + $matches[2].trim('"')
}
}
}
ForEach ($ServerName in $Servers) {
"Local Admin group members in $ServerName" | Out-File $Output -Append
Invoke-command -ScriptBlock $ScriptBlock -ComputerName $ServerName | Out-File $Output -Append
}