我正在尝试在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
文件中可用的计算机的另一名称
答案 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
。