如何在CSV中引用多个行来卸载软件?

时间:2018-12-11 14:00:23

标签: powershell

我有一个脚本,可以根据是否安装,卸载或未知软件(无法ping,RPC服务器不可用等)查询AD计算机是否在输出到不同.csv文件的软件中安装

现在,我在安装了软件的计算机上安装了csv,我正在尝试使用Get-WmiObject来卸载软件,但是我无法正确引用CSV。我究竟做错了什么? .csv的布局如下:

Name
comp1
comp2
comp3

这是我基本上要为CSV中的每一行运行的脚本:

$computers = Import-Csv C:\Users\AaronGDL\Desktop\CompInstalled.csv

foreach ($Name in $computers) {
    Write-Host $_.Name
    $Remove = Get-WmiObject -Class Win32_Product -ComputerName $Name -Filter "Name >like '%Software%'"
    $Remove.Uninstall()
}

1 个答案:

答案 0 :(得分:2)

您的$computers变量是从具有Name列的CSV填充的,因此最终得到了一组PowerShell对象,每个对象都有一个Name属性。因此,您需要引用此属性来获取ForEach循环中的每台计算机名称,因此-ComputerName $Name必须成为-ComputerName $Name.name

$computers = Import-Csv C:\Users\AaronGDL\Desktop\CompInstalled.csv

foreach ($Name in $computers) {
    Write-Host $Name.name
    $Remove = Get-WmiObject -Class Win32_Product -ComputerName $Name.name -Filter "Name >like '%Software%'"
    $Remove.Uninstall()
}

或者,您可以执行以下操作:

foreach ($Name in $computers.name) { .. }

然后继续在循环中引用$Name