it-source

PowerShell에서 로컬 호스트 이름을 가져오려면 어떻게 해야 합니까?

criticalcode 2023. 5. 31. 16:02
반응형

PowerShell에서 로컬 호스트 이름을 가져오려면 어떻게 해야 합니까?

PowerShell에서 로컬 호스트(시스템) 이름을 가져오려면 어떻게 해야 합니까?PowerShell 1.0을 사용하고 있습니다.

.NET Framework 방법을 사용하면 됩니다.

[System.Net.Dns]::GetHostName()

또한.

$env:COMPUTERNAME

이전 콘솔 유틸리티는 모두 PowerShell에서 올바르게 작동합니다.

PS> hostname
KEITH1

긴 형식:

get-content env:computername

간단한 형식:

gc env:computername

위의 질문은 모두 정답이지만 호스트 이름과 도메인 이름을 원하는 경우 다음을 시도하십시오.

 [System.Net.DNS]::GetHostByName('').HostName

로컬 FQDN에 대한 @CPU-100의 응답을 약간 수정합니다.

[System.Net.DNS]::GetHostByName($Null).HostName

PowerShell Core v6(macOS, Linux 및 Windows에서 작동)의 경우:

[Environment]::MachineName

hostname파워셸에서도 잘 작동합니다.

Powershell의 박쥐 파일 코드와 유사합니다.

cmd

wmic path Win32_ComputerSystem get Name

파워셸

Get-WMIObject Win32_ComputerSystem | Select-Object -ExpandProperty name

그리고...

hostname.exe

Powershell 버전 1.0 및 기타 Powershell을 통해 정보를 얻을 수 있는 다양한 방법에 대한 개요는 특별히 없습니다.

  • Native CmdLet(일반적으로 최고이지만 컴퓨터 이름을 얻는 데는 매우 느림):
    (Get-ComputerInfo).CsDNSHostName
    "도메인 이름 서버에 따른 로컬 컴퓨터 이름"을 반환합니다(Info about, Info about the return value).
  • 기존 명령줄 실행 파일:
    hostname.exe
    시스템의 전체 시스템 이름 중 호스트 이름 부분을 반환합니다(정보:
  • 환경 변수:
    $env:COMPUTERNAME
  • 레지스트리:
    (Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName).ComputerName
  • 정적.순 속성:
    [Environment]::MachineName
    "이 로컬 컴퓨터의 NetBIOS 이름"을 반환합니다. (클래스에 대한 정보)
  • 정적.순 방법:
    [System.Net.Dns]::GetHostEntry("").HostName
    시스템의 DNS 호스트 이름(fqdn)을 반환합니다(메소드에 대한 정보).
  • COM-Object 속성(사용되지 않는 Scripting-Api를 통한 컴퓨터 이름):
    (New-Object -ComObject WScript.Network).ComputerName
    "컴퓨터 시스템의 이름"을 반환합니다. (WshNetwork 개체에 대한 정보, 윈도우즈 스크립트 호스트 개체에 대한 정보)
  • WMI-Object 속성:
    (Get-CimInstance -ClassName Win32_ComputerSystem).Name
    (Win32_Computer System에 대한 정보)
  • 네이티브 API 함수를 호출합니다.
Add-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()

"로컬 시스템을 고유하게 식별하는 정규화된 DNS 이름을 반환합니다.이 이름은 DNS 호스트 이름과 DNS 도메인 이름의 조합으로, HostName 형식을 사용합니다.도메인 이름.로컬 컴퓨터가 클러스터의 노드인 경우 lpBuffer는 클러스터 가상 서버의 정규화된 DNS 이름을 수신합니다."
(API 함수에 대한 정보, 열거대한 정보, (비공식)c# 서명 사용, (비공식)c# 서명 사용, powershell의 P/Invoke에 대한 짧은 블로그 게시물)
참고: P/Invoke는 주의하여 사용하십시오.사용법이 잘못되면 실제로 파워셸이 손상될 수 있습니다.Add-Type호출이 다소 느리지만 스크립트에서 한 번만 호출하면 됩니다.

제가 가장 설명할 수 있는 방법은 다음과 같습니다.

[System.Net.DNS]::GetHostByName($env:COMPUTERNAME).HostName

과 같이 할 수 .$name = $(hostname)

나는 그것을 단순히 실행하는 것에 추가하고 싶습니다.$name = hostname또한 PC의 로컬 호스트 이름을 변수에 저장합니다.

언급URL : https://stackoverflow.com/questions/1169891/how-do-i-get-the-localhost-name-in-powershell

반응형