Скрипт Powershell для сравнения компьютеров AD с текстовым файлом и изменения службы реестра на этих компьютерах, а затем записи компьютеров, которые были отключены - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь отфильтровать компьютеры, на которых уже запущен скрипт (который включает удаленную службу реестра) в AD, из списка в текстовом файле

$NamesFromFile = Get-Content 
C:\scripts\Inventory\offlineRemoteRegStartupWorkstations.txt

$computers = get-adcomputer -Filter * | Where-Object { 
$_.Name.SubString(1) -in $NamesFromFile } 
foreach ($computer in $computers) 
{ 
if (Test-Connection -count 1 -computer $computer.Name -quiet){ 
Write-Host "Updating system" $computer.Name "....." -ForegroundColor 
Green 
Set-Service –Name remoteregistry –Computer $computer.Name -StartupType 
Automatic 
Get-Service remoteregistry -ComputerName $computer.Name | start-service 
} 
else 
{ 
Write-Host "System Offline " $computer.Name "....." -ForegroundColor Red 
echo $computer.Name >> C:\scripts\Inventory\offlineRemoteRegStartup.txt} 
}

без ошибок, просто пусто

1 Ответ

0 голосов
/ 16 мая 2019

Ниже переписать ваш скрипт.

Поскольку вы проверяете, присутствует ли в списке компьютеров только первый символ имени компьютера, ваша переменная $computers останется пустой, поэтому ничего не происходит.

Кроме того, я думаю, что было бы целесообразно добавить проверку, если тип запуска службы RemoteRegistry еще не установлен на Автоматический, потому что в конце концов .. имена компьютеров, которые вы читаете из файла, могут быть неточными.

Чтобы избежать необходимости постоянно использовать $computer.Name, я использую Select-Object -ExpandProperty Name, поэтому нам нужно только просмотреть список строк.

$NamesFromFile = Get-Content -Path 'C:\scripts\Inventory\offlineRemoteRegStartupWorkstations.txt' | Sort-Object -Unique

Get-ADComputer -Filter * | 
    Where-Object { $NamesFromFile -contains $_.Name } |  # if the computer name is in the list
    Select-Object -ExpandProperty Name |                 # we're only interested in the Name property
    ForEach-Object {
        # the automatic variable '$_' represents a single computername from the list
        if (Test-Connection -Count 1 -ComputerName $_ -Quiet) {
            # test if the RemoteRegistry service startup type is not already Automatic
            # you can do the same with (Get-WmiObject -Class Win32_Service -Filter "Name='RemoteRegistry'" -ComputerName $_)
            # only slower..
            if ((Get-CimInstance -Class Win32_Service -Filter "Name='RemoteRegistry'" -ComputerName $_).StartMode -ne 'Auto') {
                Write-Host "Updating system '$_'....." -ForegroundColor Green
                Set-Service –Name RemoteRegistry –Computer $_ -StartupType Automatic
                Get-Service -Name RemoteRegistry –Computer $_ | Start-Service
            }
            else {
                Write-Host "RemoteRegistry service startup type already Automatic on computer '$_'....." -ForegroundColor Yellow
            }
        }
        else {
            Write-Host "System Offline '$_'....." -ForegroundColor Red
            Add-Content -Path 'C:\scripts\Inventory\offlineRemoteRegStartup.txt' -Value $_
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...