Как удалить запись Host через команду powershell - PullRequest
0 голосов
/ 21 февраля 2020

Я попытался добавить запись в файл хоста, как показано ниже, нужна помощь по удалению той же записи из файла хоста ..

Добавить-Content -Path C: \ Windows \ System32 \ drivers \ etc \ hosts -Значение 20.0.0.1`tlocalhost -Force

Ответы [ 3 ]

0 голосов
/ 21 февраля 2020

Импорт содержимого файла, внесение изменений и экспорт снова ...

$filecontent = Get-Content -Path C:\Windows\System32\drivers\etc\hosts
$changedfilecontent = $filecontent -replace "20.0.0.1`tlocalhost",""
$changedfilecontent | Out-File "C:\Windows\System32\drivers\etc\hosts"

(не проверено)

0 голосов
/ 22 февраля 2020

Я на 100% согласен с тем, что всегда делаю копию критически важных файлов, прежде чем что-то делать с ней.

$HostFile = Get-ChildItem -Path 'C:\Windows\System32\drivers\etc\hosts' 
<#
    Directory: C:\Windows\System32\drivers\etc


Mode                LastWriteTime         Length Name                                                                                                         
----                -------------         ------ ----
-a----        18-Mar-19     21:49            824 hosts
#>

Copy-Item -Path $HostFile.FullName -Destination "$($HostFile.DirectoryName)\$($HostFile.Name)_$(Get-Date -Format 'ddMMyyyy@HHmm')" -WhatIf
<#
What if: Performing the operation "Copy File" on target "Item: C:\Windows\System32\drivers\etc\hosts Destination: C:\Windows\System32\drivers\etc\hosts_2102202
0@1602".
#>

Сложнее добавить против удаления, я не настолько согласен. Так как это просто текстовый файл, важный, но только текстовый файл ...

  1. Чтение файла как обычно
  2. выделение всей строки с целевым строковым шаблоном
  3. Удалить эту строку
  4. Создать новую строку, чтобы добавить
  5. Добавить строку.

.. против встроенного в эту строку материала.

# Find the line
Get-Content -Path 'C:\Windows\System32\drivers\etc\hosts' | 
Select-String -Pattern '\d.*localhost.*'
<#
#   127.0.0.1       localhost
#   ::1             localhost
#>

# Remove the line
(Get-Content -Path 'C:\Windows\System32\drivers\etc\hosts' | 
Select-String -Pattern '\d.*localhost.*') -replace ''

# Add a line
Add-Content -Path 'C:\Windows\System32\drivers\etc\hosts' -Value '  151.101.193.69       stackoverflow.com'

# Or just this
$HostFile = Get-ChildItem -Path 'C:\Windows\System32\drivers\etc\hosts' 
Copy-Item -Path $HostFile.FullName -Destination "$($HostFile.DirectoryName)\$($HostFile.Name)_$(Get-Date -Format 'ddMMyyyy@HHmm')" 
(Get-Content -Path 'C:\Windows\System32\drivers\etc\hosts' | 
Select-String -Pattern '\d.*localhost.*') -replace '', '    151.101.193.69       stackoverflow.com' 

Да, и кстати, это уже какое-то время существовало через MS powershellgallery.com, так что нет реальной необходимости делать это с нуля, если это не было учебным процессом.

Find-Module -Name '*hostfile*' | Format-Table -AutoSize

<#
Version Name                Repository Description                                 
------- ----                ---------- -----------                                 
1.0.2   Web.Helper.HostFile PSGallery  Helper to manage the Windows host file      
1.0.3   Add-HostFileEntry   PSGallery  Adds and removes entries from the HOSTS file
1.0     HostFile            PSGallery  Helper commands to interact with host file 
#>

Изменить Добавить, Удалить - Windows Файл Хостов Локально и Удаленно - PowerShell

Вы можете Изменить, Добавить - Удалить - Windows Хост Файл Файл Локально и Удаленно, используя этот скрипт PowerShell. Этот сценарий состоит из 4 частей. # 1-я часть посвящена добавлению записей хостов на локальном компьютере или мы можем развернуть их с помощью сценария входа в gpo. # 2-я часть предназначена для изменения, замены или удаления любой записи хоста. Скачать: modifyhost.ps1

0 голосов
/ 21 февраля 2020

Сначала сделайте копию исходного файла, чтобы вы всегда могли вернуться, но для этого следует сделать следующее:

$path = 'C:\Windows\System32\drivers\etc\hosts'
(Get-Content -Path $path) | 
    Where-Object { $_ -notmatch '^\s*20\.0\.0\.1\s+localhost'} | 
    Set-Content -Path $path -Force

Детали регулярного выражения:

^                 Assert position at the beginning of the string
\s                Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.)
    *              Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
20                Match the characters “20” literally
\.                Match the character “.” literally
0                 Match the character “0” literally
\.                Match the character “.” literally
0                 Match the character “0” literally
\.                Match the character “.” literally
1                 Match the character “1” literally
\s                Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.)
    +              Between one and unlimited times, as many times as possible, giving back as needed (greedy)
localhost         Match the characters “localhost” literally
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...