通过Powershell脚本识别32/64位版本

时间:2018-02-12 13:48:14

标签: arrays powershell

我需要确定所安装的软件(每台主机多次)是32位还是64位版本。为此,我想通过powershell检查服务的执行文件夹。

这是我的第一个PowerShell脚本,我有点迷失了。我想将Get-WmiObject win32_service的信息存储到多维数组中。

如果我运行命令选择PathName,State和DisplayName,将缩短PathName,因为我多次运行此命令。但不知道如何获得阵列的正确字段或在我的foreach中获得正确的字段

这是我到目前为止所得到的:

`$ServiceArray = @()
$ServiceArray[] = Get-WmiObject win32_service | ?{$_.Name -like 'foo_*'} | 
Select PathName
$ServiceArray[][] = Get-WmiObject win32_service | ?{$_.Name -like 'foo_*'} | 

Select State
$ServiceArray[][][] = Get-WmiObject win32_service | ?{$_.Name -like 'foo_*'} 
| Select DisplayName
foreach($array in $ServiceArray[]) 
   {
    if ($array.Contains(\bin\test\win64\test.exe)
    {
     $ServiceArray[][][][] = "win64"
 }    
 else 
 {
     $ServiceArray[][][][] = "win32"
 }  `

我知道它不会这样,但我也不知道它是如何正确的。

2 个答案:

答案 0 :(得分:2)

您可以使用Select-Object在同一语句中选择多个属性:

$ServiceArray = Get-WmiObject Win32_Service | 
  Where-Object {$_.Name -like 'foo_*'} |
  Select PathName,State,DisplayName

如果需要,您还可以将Select-Object与计算属性一起使用,以根据PathName参数添加位数:

$ServiceArray = Get-WmiObject Win32_Service | 
  Where-Object {$_.Name -like 'foo_*'} |
  Select PathName,State,DisplayName,@{Name='Bitness';Expression={if($_.PathName -like "*Win64*"){"Win64"}else{"Win32"}}}

答案 1 :(得分:0)

您可以选择多个属性。你快到了。编辑了一下你的代码。

$ServiceArray = @()
$ServiceArray = Get-WmiObject win32_service | ?{$_.Name -like 'foo_*'} | Select PathName,State,DisplayName,Architecture
foreach($Element in $ServiceArray) 
{
    if ($Element.PathName.Contains('\bin\test\win64\test.exe'))
    {
        $Element.Architecture = 'win64'
    }    
    else 
    {
        $Element.Architecture = 'win32'
    }
    $Element
}