我需要确定所安装的软件(每台主机多次)是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"
} `
我知道它不会这样,但我也不知道它是如何正确的。
答案 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
}