Автоматизируйте поиск членов локальной группы "Администраторы"
У меня есть скрипт PowerShell с именем script1.ps1, который отлично работает. Вот сценарий:
Write-Host Script to display members of the local -ForegroundColor Green
Write-Host Administators group of a remote server. -ForegroundColor Green
Write-Host "`n"
$strComputer = Read-Host "Please enter the computer name"
$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$group = $computer.PSBase.Children.Find("administrators")
Write-Host ""
Write-Host "Computer Name : "$computer.Name
Write-Host "_____________________________________"
Write-Host ""
Write-Host "Group Name : "$Group.Name
Write-Host "_____________________________________"
$domain = $group.Path.Split("/")[2]
$string1 = "WinNT://" + $domain + "/" + $strComputer + "/"
$string2 = $strComputer + "/"
$string3 = "WinNT://"
$members = ($group.PSBase.Invoke("Members") | Foreach-Object {$_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}) -replace ($string1,$string2) -replace ($string3,"")
Write-Host ""
Write-Host "Members : "
Write-Host ""
$members
Но, как вы видите, я обязан каждый раз писать имя компьютера, который хочу. Я спрашиваю себя, есть ли функция или другие вещи, которые автоматически берут имена компьютеров из текстового или CSV-файла? Подобно этому, в начале скрипта, он автоматически берет все имена компьютеров и дает мне членов локальной группы "Администраторы", которые затем будут экспортированы в один текстовый файл или файл CSV?
Изменить: обновленный скрипт в соответствии с ответом.
У меня есть скрипт PowerShell с именем script1.ps1, который не работает идеально. Вот сценарий:
Write-Host Script to display members of the local -ForegroundColor Green
Write-Host Administators group of a remote server. -ForegroundColor Green
Write-Host "`n"
Get-Content 'C:\Users\herbautr\Desktop\List1.txt' | ForEach-Object {
Write-Host "-$_-"
$computer = [ADSI]("WinNT://" + $_ + ",computer")
$group = $computer.PSBase.Children.Find("administrators")
Write-Host ""
Write-Host "Computer Name : "$computer.Name
Write-Host "_____________________________________"
Write-Host ""
Write-Host "Group Name : "$Group.Name
Write-Host "_____________________________________"
$domain = $group.Path.Split("/")[2]
$string1 = "WinNT://" + $domain + "/" + $_ + "/"
$string2 = $_ + "/"
$string3 = "WinNT://"
$members = ($group.PSBase.Invoke("Members") | Foreach-Object {$_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)}) -replace ($string1,$string2) -replace ($string3,"")
Write-Host ""
Write-Host "Members : "
Write-Host ""
$members
} | Set-Content 'C:\Users\herbautr\Desktop\administrators.txt'
Я добавил 1 имя компьютера в List1.txt:
01SPEAI-TEST1 01SPEAI-TEST2 02SPHPV-TEST1 01SLCPTAAP-PROD
И это работает (не) отлично (нечитаемое расположение)
01SPEAI-PROD1/Administrator
VNF-PRINCIPAL/Admins du domaine
VNF-PRINCIPAL/svceri
01SPEAI-PROD2/Administrator
VNF-PRINCIPAL/Admins du domaine
VNF-PRINCIPAL/svceri
02SPHPV-PROD1/Administrator
VNF-PRINCIPAL/Admins du domaine
01SLCPTAAP-PROD/Administrator
VNF-PRINCIPAL/Admins du domaine
01SLCPTAAP-PROD/maint
VNF-PRINCIPAL/svcoraas
VNF-PRINCIPAL/svcvisionit
VNF-PRINCIPAL/GopOAS
VNF-PRINCIPAL/svcdigora
Примечание (15:18 вечера): у меня есть попытка с 5 именами, он продолжает работать..
Почему при добавлении только 1 имени это "работает"? Оо"
1 ответ
Ты ищешь Get-Content
а также Set-Content
,
Get-Content 'C:\path\to\computers.txt' | ForEach-Object {
$computer = [ADSI]("WinNT://" + $_ + ",computer")
...
} | Set-Content 'C:\path\to\administrators.txt'
Обратите внимание, что вам нужно заменить все вхождения $strComputer
внутри ForEach-Object
цикл с автоматической переменной текущего объекта ($_
).
Если вы хотите использовать CSV для ввода и вывода, используйте Import-Csv
а также Export-Csv
командлеты.
Import-Csv 'C:\path\to\computers.csv' | ForEach-Object {
$computer = [ADSI]("WinNT://" + $_.ComputerName + ",computer")
...
$members | ForEach-Object {
New-Object -Type PSObject -Property @{
Member = $_
}
}
} | Export-Csv 'C:\path\to\administrators.csv' -NoType
Обратите внимание, что CSV имеют некоторые преимущества, когда вам нужно обрабатывать элементы с несколькими свойствами, но они требуют более сложной обработки, чем простые строки (как вы можете видеть в моем примере выше).