如何在计算机列表上运行Powershell

时间:2019-05-30 19:05:56

标签: powershell powershell-v4.0

我正在尝试在1.txt下可用的名为c:\1\1.txt的文件中以纯文本文件(每行1台计算机)可用的计算机列表上运行远程命令。

我在powershell脚本中运行的变量$comp正以$comp的身份运行,而不是更改为计算机名

$computers = Get-Content c:\1\1.txt

foreach ($comp in $computers){
$LicenseInfo = Get-WmiObject SoftwareLicensingProduct -ComputerName $comp | Where-Object { $_.partialProductKey -and $_.ApplicationID -eq "55c92734-d682-4d71-983e-d6ec3f16059f" } | Select-Object PartialProductKey, Description, ProductKeyChannel, @{ N = "LicenseStatus"; E = { $lstat["$($_.LicenseStatus)"] } } 
echo $LicenseInfo, $comp
}

使用计算机名$comp运行powershell命令-其中$comp每次在循环中都会更改,c:\1\1.txt文件中可用的计算机的另一名称

2 个答案:

答案 0 :(得分:0)

出现选择对象错误的原因是因为echo不是Powershell中用于批处理的命令。 Powershell使用Write-Host这里有更多信息: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-host?view=powershell-4.0
就将定界符开关添加到get-content的代码而言,将分隔每台计算机的名称

获取内容-路径c:\ 1 \ 1.txt-分隔符`r

`r代表回车

答案 1 :(得分:0)

根据所需的输出方式,您可以尝试如下操作:

foreach ($comp in $computers) {

    $LicenseInfo = Get-WmiObject SoftwareLicensingProduct -ComputerName $comp | Where-Object { $_.partialProductKey -and $_.ApplicationID -eq "55c92734-d682-4d71-983e-d6ec3f16059f" } | Select-Object PartialProductKey, Description, ProductKeyChannel, @{ N = "LicenseStatus"; E = { $lstat["$($_.LicenseStatus)"] } }

    $LicenseInfo
    $comp

}

您在代码中遇到的positional parameter错误是因为您提供了echo变量和文本,并且文本没有用引号引起来。

如果只想输出变量的内容,则不需要echo甚至不需要Write-Host