2015-09-02 7 views
0

Попытка получить этот скрипт powershell для проверки конкретной записи в файле на всех ПК в моем домене и тех, у которых указанное имя OLD-сервера выписано в файл, затем запустите замену на только компьютеры с найденным значением. Я могу получить его, сделав это на каждом ПК, поскольку я знаю, что применим только к тем, у кого есть соответствующие данные, однако мне нужно запустить службу остановки, а затем запустить сервис на каждом ПК, где я делаю изменения, и я не хочу остановить/запустить службу на каждом ПК в домене. Я дошел до того, что все ПК выведены в файл, но не уверены, как их объединить в заявление IF.Найти все компьютеры с конкретным текстовым файлом

$path = "C:\myfile.txt" 
$find = "OldServerName" 
$replace = "NewServerName" 
$adcomputers = "C:\computers.txt" 
$changes = "C:\changes.txt" 

Get-ADComputer -Filter * | Select -Expand Name | Out-File -FilePath .\computers.txt 

#For only computers that need the change 
Stop-Service -name myservice 
(get-content $path) | foreach-object {$_ -replace $find , $replace} | out-file $path 
Start-Service -name myservice 
+0

Я не понимаю, чего вы пытаетесь достичь. Какая цель заменила имя сервера в текстовом файле, когда вы нигде не используете ни старое, ни новое имя? Почему вы экспортируете все вычислительные имена из AD в совершенно другой текстовый файл? Зачем вам нужно прекратить услугу (услугу?), Прежде чем выполнять замену и запустить ее снова? Какое «изменение» вы пытаетесь сделать? Пожалуйста, сделайте шаг назад и опишите фактическую проблему, которую вы пытаетесь решить, вместо того, что вы считаете решением. –

ответ

0

Вы можете проверить, есть ли в файле на компьютере строки, соответствующие данному слову. Затем обрабатывайте файл только в том случае, если строка найдена, то есть что-то вроде этого может быть запущено на всех компьютерах:

# Check if the computer needs the change - Find any line with the $find word 
$LinesMatched = $null 
$LinesMatched = Get-Content $path | Where { $_ -match $find } 

# If there is one or more lines in the file that needs to be changed 
If($LinesMatched -ne $null) { 

    # Stop service and replace words in file. 
    Stop-Service -name myservice 
    (Get-Content $path) -replace $find , $replace | Out-File $path 
    Start-Service -name myservice 
} 
Смежные вопросы