Скрипт Powershell для очистки текста после строки localhost и добавления статического имени хоста и текущего IP-адреса в файл

363
ra8ul

Необходимо очистить весь текст после строки 127.0.0.1 файла хоста localhost в PowerShell. последняя строка - это запись localhost в файле хоста, после этой строки я хотел бы удалить все текстовые строки, если это возможно. Ниже приведен код.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted   $ip = get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1}   $ip.ipaddress[0] $hst = $env:COMPUTERNAME $hostfile = Get-Content "$($env:windir)\system32\Drivers\etc\hosts" if ($hostfile -notcontains "127.0.0.2 hostname1" -and  (-not($hostfile -like "$($ip.ipaddress[0]) $hst"))) { Add-Content -Encoding UTF8 "$($env:windir)\system32\Drivers\etc\hosts" "$($ip.ipaddress[0]) $hst"  } 
1

1 ответ на вопрос

0
Kevin K.

Этот сценарий удаляет все после 127.0.0.1 localhostи сохраняет его обратно в файл. Если ваши условия подтвердят, что они выполняются, новая запись вводится до того, как файл будет записан обратно на диск.

Код:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted   $ipAdresses = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object {$_.IPAddress.length -gt 0} | Select-Object -Property 'IPAddress' -First 1  $ip = $ipAdresses.IPAddress[0] $hst = $env:COMPUTERNAME $hostFilePath = "$($env:windir)\system32\Drivers\etc\hosts" $hostfile = Get-Content -Path $hostFilePath $newHostFileEntry = " " -f $ip, $hst  # Delete all text after what is defined as $matchString $lastIndexOfNewArray = 0 $matchString = '127.0.0.1\s+localhost'  for ($index = 0; $index -lt $hostfile.Count; $index++) { if ($hostfile[$index] -match $matchString) { $lastIndexOfNewArray = $index break } } $newHostFileContent = $Hostfile[0..$lastIndexOfNewArray]  # Adds entry for local IP address if conditions resolve to $true if ($newHostFileContent -notcontains "127.0.0.2 hostname1" -and  (-not($newHostFileContent -like $newHostFileEntry))) { $newHostFileContent = New-Object System.Collections.ArrayList(,$newHostFileContent) $newHostFileContent.Add($newHostFileEntry) > $null }  Out-File -Encoding UTF8 -FilePath $hostFilePath -InputObject $newHostFileContent -Append:$false -Confirm:$false 
Вау, спасибо, что работает отлично, когда запускаешься в редакторе powershell, но не по щелчку правой кнопкой мыши «Запускать с Powershell». Я делаю что-то не так. Еще раз спасибо ra8ul 5 лет назад 0
Есть ли какое-либо сообщение об ошибке? Иначе, вы можете открыть PowerShell и запустить оттуда файл сценария, чтобы увидеть, что, возможно, пошло не так. Kevin K. 5 лет назад 0
Есть ошибка, когда я делаю это правой кнопкой мыши. Выполнить с PowerShell, он мигает красным в течение миллисекунды на экране, который я не смог записать. Но сценарий выполняется без ошибок в редакторе Powershell и добавляет файл хоста без проблем. Дайте мне знать, если мы сможем зафиксировать ошибку в файле журнала. Я новичок в powershell Спасибо заранее. ra8ul 5 лет назад 0
Хорошо, затем попробуйте сначала открыть PowerShell и запустить файл скрипта изнутри. Это должно держать окно PowerShell открытым, и вы можете сообщить об ошибке. Kevin K. 5 лет назад 0
Это ошибка, которую я получаю, если я запускаю файл в powershell ra8ul 5 лет назад 0
D: \ UpdateHosstfileip.ps1: термин «D: \ UpdateHosstfileip.ps1» не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку. В строке: 1 символ: 1 + D: \ UpdateHosstfileip.ps1 + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (D: \ UpdateHosstfileip. ps1: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException ra8ul 5 лет назад 0
Мне жаль спрашивать, но предназначена ли опечатка `UpdateHosstfileip.ps1`? Ошибка обычно указывает на то, что файл не найден. Kevin K. 5 лет назад 0
Я сожалею, что это опечатка, я мог выполнить команду без ошибок из командной строки powershell. Но я все еще получаю сообщение об ошибке из контекстного меню «Запускать с PowerShell». Спасибо ra8ul 5 лет назад 0
Возможно [запуск PowerShell из PowerShell] (https://stackoverflow.com/a/1340661/8179604) с параметром -noexit может привести к ошибке. Иначе, вы должны убедиться, что ваша политика выполнения позволяет запускать сценарии. Поэтому проверьте `Get-ExecutionPolicy` и используйте` Set-ExecutionPolicy`, как описано в [Онлайн-справке Microsoft по Set-ExecutionPolicy] (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security / Set-ExecutionPolicy? вид = 6-PowerShell) Kevin K. 5 лет назад 0