Удаленный вызов Get-WmiObject завершается неудачно, когда внутри скриптового блока Start-Job - PullRequest
2 голосов
/ 20 июля 2011

Хорошо, я пытался это выяснить, но решил, что пришло время спросить об паутинах.Мне интересно, если это ошибка или что-то подобное.

Я пытаюсь запустить задания на нескольких компьютерах, чтобы определить, какие имена баз данных находятся на них.

Настройка системы Мой компьютер1: Powershell 2.0, Windows 2k3 Enterprise x64

На компьютере1 я могу запустить:

Start-Job -scriptblock {gwmi -query "select * from win32_computersystem" -ComputerName "Computer2"}

И задание будет зависать в состоянии«Бег» навсегда.Но не в том случае, если я запускаю ту же команду вне блока сценария задания в оболочке.

Я попробовал эту точную настройку здесь с учетными данными локального администратора (против моего домена), но с тем жерезультат.По какой-то причине у меня это не работает.

Я пытался создать собственный объект WMI dotnet, который не использует gwmi, но я получаю тот же результат!

-asjobпараметр ?: Это не решение.

  1. При использовании этого параметра окно powershell падает примерно на 2 ГБ памяти, используемой в системе 12 ГБ;Принимая во внимание, что я могу использовать start-job вплоть до 12GB без проблем.С таким же успехом я мог бы выполнять каждый запрос последовательно.

  2. Кроме того, память никогда не освобождается при использовании параметра -Asjob в Gwmi, поэтому дальнейшие задания не могут быть продолжены;даже после запуска "удалить-работу * -force" или "[GC] :: Collect ()", потребление памяти powershell.exe упорно остается тем же (опять-таки, в отличие от запуска задания).

Так что единственное, что я не пробовал, может быть, мне нужно указать параметр полномочий?

1 Ответ

0 голосов
/ 20 июля 2011

Я использую Invoke-Command -asJob для этого:

PS C:\> Invoke-Command -ComputerName "WM2008R2ENT" -ScriptBlock {gwmi -query "select * from win32_computesystem"} -AsJob

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
1               Job1            Running    True            wm2008r2ent          gwmi -query "select * ...


PS C:\> Get-Job

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
1               Job1            Completed  True            wm2008r2ent          gwmi -query "select * ...


PS C:\Développements> Receive-Job 1


Domain              : dom.fr
Manufacturer        : VMware, Inc.
Model               : VMware Virtual Platform
Name                : WM2008R2ENT
PrimaryOwnerName    : Utilisateur Windows
TotalPhysicalMemory : 683139072
PSComputerName      : wm2008r2ent

Вы можете заменить имя машины списком машин. Не пытайтесь снова кодировать '-Computername в CmdLets, которые вы используете в блоке сценария.


(Edited) Я пробую командную строку, и она работает для меня от клиента Windows Seven (64 бита) до W2K3 (32 бита)

Мой клиент НЕ находится в домене сервера, и я использую учетные данные администратора домена.

Вы сделали тест из 32-битного Powershell или 64-битного Powershell?

Пытаетесь ли вы остановить службу WMI на удаленном компьютере и очистить базу данных WMI, это иногда подходит, когда вы выполняете слишком много тестов на сервере WMI (например, с событиями).

...