How do I get the localhost (machine) name in PowerShell? I am using PowerShell 1.0.
How do I get the localhost (machine) name in PowerShell? I am using PowerShell 1.0.
You can just use the .NET Framework method:
[System.Net.Dns]::GetHostName()
also
$env:COMPUTERNAME
Don't forget that all your old console utilities work just fine in PowerShell:
PS> hostname
KEITH1
A slight tweak on @CPU-100's answer, for the local FQDN:
[System.Net.DNS]::GetHostByName($Null).HostName
An analogue of the bat file code in Powershell
Cmd
wmic path Win32_ComputerSystem get Name
Powershell
Get-WMIObject Win32_ComputerSystem | Select-Object -ExpandProperty name
and ...
hostname.exe
The most descriptive way for me is:
[System.Net.DNS]::GetHostByName($env:COMPUTERNAME).HostName
You can store the value as follows
$name = $(hostname)
I want to add that simply executing $name = hostname will also save the localhost name of the PC into a variable.
Not specifically for Powershell version 1.0 and more of an overview of different possible ways to get information via Powershell:
(Get-ComputerInfo).CsDNSHostNameGet-ComputerInfo, Info about its return value)hostname.exehostname.exe$env:COMPUTERNAME(Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName).ComputerName[Environment]::MachineNameSystem.Environment class)[System.Net.Dns]::GetHostEntry("").HostNameSystem.Net.Dns.GetHostEntry Method)(New-Object -ComObject WScript.Network).ComputerName(Get-CimInstance -ClassName Win32_ComputerSystem).NameAdd-Type -TypeDefinition @'
public enum COMPUTER_NAME_FORMAT{
ComputerNameNetBIOS,
ComputerNameDnsHostname,
ComputerNameDnsDomain,
ComputerNameDnsFullyQualified,
ComputerNamePhysicalNetBIOS,
ComputerNamePhysicalDnsHostname,
ComputerNamePhysicalDnsDomain,
ComputerNamePhysicalDnsFullyQualified,
ComputerNameMax,
}
public static class Kernel32{
[System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool GetComputerNameEx(COMPUTER_NAME_FORMAT NameType, System.Text.StringBuilder lpBuffer, ref uint lpnSize);
}
'@
$len = 0
[Kernel32]::GetComputerNameEx([COMPUTER_NAME_FORMAT]::ComputerNameDnsFullyQualified, $null, [ref]$len); #get required size
$sb = [System.Text.StringBuilder]::new([int]$len) #create StringBuilder with required capacity (ensure int constructor is used, otherwise powershell chooses string constructor for uint value...)
$len = $sb.Capacity #get actual capacity of StringBuilder (important, as maybe StringBuilder was constructed differently than expected)
[Kernel32]::GetComputerNameEx([COMPUTER_NAME_FORMAT]::ComputerNameDnsFullyQualified, $sb, [ref]$len);
$sb.ToString()
Returns "The fully qualified DNS name that uniquely identifies the local computer. This name is a combination of the DNS host name and the DNS domain name, using the form HostName.DomainName. If the local computer is a node in a cluster, lpBuffer receives the fully qualified DNS name of the cluster virtual server."
(Info about the GetComputerNameEx API function, Info about the COMPUTER_NAME_FORMAT enumeration, used c# signature of COMPUTER_NAME_FORMAT (unofficial), used c# signature of GetComputerNameEx (unofficial), short blogpost about P/Invoke in powershell)
Note: Use P/Invoke with caution. Sufficiently incorrect usage can actually make powershell crash. The Add-Type call is somewhat slow (but only needs to be called once in the script).