Adam o Automador

P> Precisa de encontrar o nome de um computador local ou remoto com Windows num script PowerShell? Não procure mais. Neste tutorial, você vai aprender como usar o PowerShell para obter um nome de computador de algumas maneiras diferentes e às vezes inesperadas.

Table of Contents

Pré-requisitos

Este artigo será um tutorial prático. Se você gostaria de aplicar os conceitos que você aprendeu neste tutorial, por favor tenha certeza de que você tem o PowerShell. É isso mesmo! O artigo irá usar o PowerShell 7 (o mais recente a partir desta escrita) mas o Windows PowerShell irá provavelmente funcionar tão bem quanto.

Usando o comando Hostname

Back antes dos dias do PowerShell o único interpretador de comandos do Windows que tínhamos era o bom ol’ cmd .exe. Nessa altura, não precisávamos de nenhum PowerShell fedorento para obter um nome de computador; tínhamos o comando hostnamep> O comando hostname não podia ser mais simples. Open up a PowerShell (or even cmd .exe prompt) and type hostname. Done. This command returns a single string (the computer name of the local computer).

Running the hostname command
Running the hostname command

Using the System.Net.DNS .NET Class

If you’d like to go the more PowerShell-centric approach, you can also reference a static method called GetHostByName() located in the System.Net.DNS .NET class or perhaps the GetHostName() method.

The GetHostName() Method

Using the GetHostName() method is probably the easiest way to use PowerShell to get a computer name. Simply call this static method with no arguments as shown below. This command will return a single string just like the hostname command does.

::GetHostName()

The GetHostByName() Method

An alternative but similar System.Net.DNS class method you can use to get a computer name is called GetHostByName(). This method is actually a DNS resolver and can be used to look up other host names as well.

If, for example, you’d like to find the host name of the local computer, run ::GetHostByName($null) or ::GetHostByName('').

::GetHostByName('')::GetHostByName($Null)

You’ll see that this method isn’t strictly meant for finding computer names; you can also lookup IP addresses as well via the AddressList property as shown below.

Using the GetHostByName() method
Using the GetHostByName() method

If, however, you want to only find the local computer name; referencie o HostName propriedade, e PowerShell apenas devolverá o nome da máquina.

::GetHostByName('').HostName::GetHostByName($Null).HostName

Usando variáveis de ambiente

As variáveis de ambiente são sempre um ótimo lugar para encontrar informações sobre computadores Windows; usar o PowerShell para obter um nome de computador não é diferente.

A variável de ambiente ComputerName Environment Variable

Todos os computadores Windows armazenam uma variável de ambiente chamada ComputerName. Como todas as outras variáveis de ambiente, pode aceder às variáveis de ambiente do utilizador através do $env PowerShell build.

Para referenciar o COMPUTERNAME variável de ambiente, abra o PowerShell e dê um prefácio ao nome da variável de ambiente com $env:. PowerShell irá então retornar o nome do computador local como uma única string.

$env:COMPUTERNAME

The MachineName Property

Alternatively, se, por alguma razão, a variável de ambiente baseada no usuário COMPUTERNAME não funcionar na sua situação, você também pode usar a propriedade MachineName que faz parte da propriedade .NET Environment class.

Referência a MachineName property in the Environment .NET como mostrado abaixo.

::MachineName

Usando o WMI

Finalmente, você sempre tem a opção de entrar no WMI ou CIM. Você provavelmente deveria fazer deste o seu último recurso, pois ele exigirá a maior parte das despesas gerais, embora minúsculas. Usando PowerShell para obter um nome de computador com WMI seria melhor consultar nomes de computadores remotos.

Se você gostaria de usar WMI para consultar um nome de computador local, use Get-CimInstance para consultar a classe Win32_ComputerSystem como mostrado abaixo. Como Get-CimInstance não retorna o nome do computador mas sim um objeto representando uma instância CIM, faça referência à propriedade Name para retornar apenas o nome do computador.

Get-CimInstance -ClassName Win32_ComputerSystem(Get-CimInstance -ClassName Win32_ComputerSystem).Name
Win32_ComputerSystem Query
Win32_ComputerSystem Query

Finding Remote Computer Names

Talvez você gerencie muitos computadores e precise encontrar o nome da máquina em todos eles. Normalmente, o hostname será representado no Active Directory (AD) se você estiver nesse tipo de ambiente ou coletado por alguma outra ferramenta de gerenciamento de ativos. Mas se não estiver, pode sempre voltar ao PowerShell.

Para usar o PowerShell para obter nomes de computadores remotos, tem duas opções. Pode utilizar os métodos que aprendeu acima num bloco de script de Remoção de PowerShell ou utilizar WMI.

Utilizar a Remoção de PowerShell

Cobrir novamente cada método nesta secção, apenas saiba isto. Você pode colocar qualquer comando local em um PowerShell Remoting scriptblock.

Se, por exemplo, você tiver o PowerShell Remoting ativado em um computador remoto, você pode colocar qualquer um dos métodos acima dentro de um scriptblock e executar esse scriptblock com o comando Invoke-Command.

Assumindo que você só tem um endereço IP e precisa encontrar o nome da máquina de um computador com o endereço IP de 192.168.1.2 e você não está num ambiente AD, ligue Invoke-Command como abaixo.

## Create the pscredential object to pass to Invoke-Command$credential = Get-Credential## Run the command on the remote computerInvoke-Command -ComputerName 192.168.1.2 -ScriptBlock { ::GetHostName() } -Credential $credential

Se o PowerShell Remoting for capaz de se ligar ao computador remoto, o PowerShell irá retornar a mesma saída que você veria se estivesse a executar este comando localmente.

Usando WMI

Alternativamente, você também pode usar o WMI para usar o PowerShell para obter o nome de um computador sem ter que embrulhar um comando dentro de um bloco de scripts. O processo para encontrar um nome de computador remoto é quase o mesmo que localmente; simplesmente use o ComputerName parâmetro.

Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2(Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2).Name

O Get-CimInstance requer autenticação. Se você estiver em um ambiente AD, você não precisará fornecer nenhuma credencial, como visto acima. No entanto, se você não estiver em um ambiente AD, você precisará estabelecer uma nova sessão CIM com o New-CimSession cmdlet, use Get-CimInstance para usar essa sessão, e então remova a sessão CIM você mesmo. Abaixo está um trecho de código sobre como fazer isso.

## Create the PSCredential object$credential = Get-Credential## Connect to the remote computer passing the creds and creating a remote session$cimSession = New-CimSession -ComputerName 192.168.1.5 -Credential $credential## Use the session to query WMI and reference the Name property(Get-CimInstance -Session $cimSession -ClassName Win32_ComputerSystem).Name

Se você leu todo este tutorial, agora você deve ter quase todas as formas mais populares de usar o PowerShell para obter um nome de computador. Embora provavelmente haja muitas mais que nos escaparam, estas são todas as maneiras que você encontrará esta tarefa realizada em muitos scripts.

Agora você saiba como realizar esta tarefa, tente construir um script que irá obter nomes de computador em massa com um loop, talvez através de um CSV ou arquivo de texto!

Deixe uma resposta

O seu endereço de email não será publicado.