...

Source file src/google.golang.org/grpc/internal/googlecloud/manufacturer_windows.go

Documentation: google.golang.org/grpc/internal/googlecloud

     1  /*
     2   *
     3   * Copyright 2022 gRPC authors.
     4   *
     5   * Licensed under the Apache License, Version 2.0 (the "License");
     6   * you may not use this file except in compliance with the License.
     7   * You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   */
    18  
    19  package googlecloud
    20  
    21  import (
    22  	"errors"
    23  	"os/exec"
    24  	"regexp"
    25  	"strings"
    26  )
    27  
    28  const (
    29  	windowsCheckCommand      = "powershell.exe"
    30  	windowsCheckCommandArgs  = "Get-WmiObject -Class Win32_BIOS"
    31  	powershellOutputFilter   = "Manufacturer"
    32  	windowsManufacturerRegex = ":(.*)"
    33  )
    34  
    35  func manufacturer() ([]byte, error) {
    36  	cmd := exec.Command(windowsCheckCommand, windowsCheckCommandArgs)
    37  	out, err := cmd.Output()
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  	for _, line := range strings.Split(strings.TrimSuffix(string(out), "\n"), "\n") {
    42  		if strings.HasPrefix(line, powershellOutputFilter) {
    43  			re := regexp.MustCompile(windowsManufacturerRegex)
    44  			name := re.FindString(line)
    45  			name = strings.TrimLeft(name, ":")
    46  			return []byte(name), nil
    47  		}
    48  	}
    49  	return nil, errors.New("cannot determine the machine's manufacturer")
    50  }
    51  

View as plain text