PowerShell · 05.07.2024

Ваши права и notepad.exe

Как и обещал — простейший скрипт для открытия файла hosts на удалённой машине в домене без использования дополнительных модулей. Всё, что нужно — это ввести имя компьютера и пароль от своей учётной записи.

Файл hosts будет открыт в блокноте (тот который notepad.exe) с правами учётной записи текущего пользователя.

## Заголовок скрипта ##
[System.Console]::Title = "Файл hosts на удалённом компьютере"
$remotehost = Read-Host "Имя удалённого компьютера"
[System.Console]::Title = "Файл hosts на $remotehost"

## Проверка сетевого пути ##
function GetRemoteHostsPath
{
    Param([Parameter(Mandatory=$true)]$ComputerName)
    $ping = Test-Connection -ComputerName $ComputerName -Count 1 -Quiet
    if ($ping)
    {
        $path = Test-Path -Path "\\$ComputerName\c$\windows\system32\drivers\etc\hosts" -PathType Leaf
        if ($path) { return $true }
        else { return $false }
    }
    else
    {
       return $false
    }
}

## Открытие файла в блокноте ##
if (GetRemoteHostsPath -ComputerName $remotehost)
{
   Start-Process -FilePath "$env:SystemRoot\system32\notepad.exe" `
   -ArgumentList "\\$remotehost\c$\windows\system32\drivers\etc\hosts" `
   -WindowStyle Normal -Credential $env:USERDOMAIN\$env:USERNAME
}
else 
{  
   Write-Host "Что-то пошло не так!" -ForegroundColor Red
   Sleep(10)
}

Разумеется, учётная запись должна быть объявлена членом группы администраторов домена. Очевидный плюс подхода с проверкой учётных данных на этапе запуска процесса notepad.exe: совсем не обязательно компилировать скрипт в исполняемый файл — достаточно просто выполнить PS1 в среде PowerShell со стандартным уровнем прав учётной записи.