Как запустить Powershell на списке компьютеров - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь запустить удаленную команду для списка компьютеров, которые доступны в виде простого текстового файла (1 компьютер в строке) в файле с именем 1.txt, доступным под c:\1\1.txt.

Что я запускаю сценарий 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
}

запустите команду powershell с Computername $comp - где $comp будет изменяться каждый раз в цикле для другого имени компьютера, доступного в c:\1\1.txt файле

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

В зависимости от того, как вы хотите получить вывод, вы можете попробовать вот так:

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 здесь, если вы просто хотите вывести содержимое ваших переменных.

0 голосов
/ 30 мая 2019

Причина, по которой вы получаете ошибку Select-Object, заключается в том, что echo не является командой в Powershell для пакетной обработки.Powershell использует Write-Host Здесь есть дополнительная информация: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-host?view=powershell-4.0
Поскольку код, добавляющий разделитель в get-content, будет разделять каждое имя компьютера

Get-Content -Path c: \ 1\ 1.txt -Delimiter `r

` r означает возврат каретки

...