Powershell 不在变量中存储 foreach 循环信息
Powershell not storing foreach loop info in Variable
我正在尝试收集安装在一组服务器上的查看器列表。我正在尝试遍历该列表和 运行 一个 wmi 查询并存储结果并导出一个 table 以及旁边的 wmi 结果和服务器名称。
我运行在服务器 2012 上安装这个
$computers = Get-Content C:\computers.txt
$WMIQuery = foreach ($computer in $computers){Get-WmiObject -Class
Win32_Product | where-object {$_.name -match "Microsoft Viewer*"}}
$WMIQuery
$WMIQuery | Out-File c:\Viewers.txt
期望的结果
服务器名称对象 1 对象 2
Server1 Microsoft Excel Viewer Microsoft Visio Viewer
我输出文件并得到一个空白的txt文件。
foreach ($computer in (Get-Content -Path "C:\computers.txt")) {
Get-WMIObject -ComputerName $computer -Class Win32_Product |
Where-Object {$_.name -match "Microsoft Viewer" } |
Out-File -Append -Path "C:\viewers.txt"
}
您的原始代码没有识别要对其执行 Get-WMIObject
的计算机,因此它只查看您作为 运行 脚本所在的计算机。
如果远程计算机上有很多产品,您可能需要考虑在远程计算机上而不是在本地进行过滤,以避免通过可能比理想速度慢的网络传输大量数据:
foreach ($computer in (Get-Content -Path "C:\computers.txt")) {
Get-WMIObject -ComputerName $computer -Class Win32_Product -Filter "Name LIKE '*Microsoft Viewer*'"|
Out-File -Append -Path "C:\viewers.txt"
}
(我 认为 我的过滤器语法是正确的;我似乎每次编写新过滤器时都必须修改它...)
我没有足够的代表来添加评论,但 Jeff 是正确的。不过楼主的查询还是有问题的。根据发布者提供的示例,以下代码不会产生任何结果:
{$_.name -match "Microsoft Viewer*"}
需要将其更改为
{$_.name -like "*Microsoft*Viewer*"}
或
{$_.name -match "Microsoft.*?Viewer"}
我正在尝试收集安装在一组服务器上的查看器列表。我正在尝试遍历该列表和 运行 一个 wmi 查询并存储结果并导出一个 table 以及旁边的 wmi 结果和服务器名称。
我运行在服务器 2012 上安装这个
$computers = Get-Content C:\computers.txt
$WMIQuery = foreach ($computer in $computers){Get-WmiObject -Class
Win32_Product | where-object {$_.name -match "Microsoft Viewer*"}}
$WMIQuery
$WMIQuery | Out-File c:\Viewers.txt
期望的结果
服务器名称对象 1 对象 2
Server1 Microsoft Excel Viewer Microsoft Visio Viewer
我输出文件并得到一个空白的txt文件。
foreach ($computer in (Get-Content -Path "C:\computers.txt")) {
Get-WMIObject -ComputerName $computer -Class Win32_Product |
Where-Object {$_.name -match "Microsoft Viewer" } |
Out-File -Append -Path "C:\viewers.txt"
}
您的原始代码没有识别要对其执行 Get-WMIObject
的计算机,因此它只查看您作为 运行 脚本所在的计算机。
如果远程计算机上有很多产品,您可能需要考虑在远程计算机上而不是在本地进行过滤,以避免通过可能比理想速度慢的网络传输大量数据:
foreach ($computer in (Get-Content -Path "C:\computers.txt")) {
Get-WMIObject -ComputerName $computer -Class Win32_Product -Filter "Name LIKE '*Microsoft Viewer*'"|
Out-File -Append -Path "C:\viewers.txt"
}
(我 认为 我的过滤器语法是正确的;我似乎每次编写新过滤器时都必须修改它...)
我没有足够的代表来添加评论,但 Jeff 是正确的。不过楼主的查询还是有问题的。根据发布者提供的示例,以下代码不会产生任何结果:
{$_.name -match "Microsoft Viewer*"}
需要将其更改为
{$_.name -like "*Microsoft*Viewer*"}
或
{$_.name -match "Microsoft.*?Viewer"}