Не работает get wmiobject

Использование «Get-WmiObject» дважды в скрипте не работает

Я пытаюсь запустить простой скрипт, который содержит информацию о свободном пространстве и размере логического диска, хотя вывод этого не является тем, что я пытаюсь выполнить. Я не буду перечислять полный сценарий, поскольку он не имеет отношения к делу, я перечислю только эти две команды.

Вот сценарий:

Это результат:

Как видите, свободное пространство остается пустым.

Любая помощь приветствуется.

2 ответа

Если нет особой причины вызывать его дважды, вы можете получить свободное место всего за один:

Полезный ответ Фабиана Мендеса обходит проблему, предоставляя однокомандный решение.

Что касается вашего симптома :

Как видите, свободное пространство остается пустым.

Нет, он просто не выводит столбец HDDs FreeSpace на консоль — хотя этот столбец (свойства с таким именем в выходных объектах) все еще существует, если вы должны были изучить вывод программно .

Короче говоря, ваша первая Get-WmiObject . | Select-Object команда блокирует отображаемые столбцы , которыми являются Name и <>.

Хотя в выходных данных команды second есть столбец Name , в нем отсутствует столбец HDDs Total Size In GB , поэтому для него не отображаются значения — а столбец HDDs FreeSpace имеет значение игнорируется полностью.

Это поведение, которое относится к неявному использованию командлета форматирования вывода Format-Table , подробно объясняется в этот ответ.

Чтобы принудительно задать отдельное форматирование вывода для каждой команды, используйте . | Out-Host или . | Format-* (командлеты форматирования, такие как Format-Table ).

Предостережение : не этого делать, если вам нужно обработать вывод программно , потому что Out-Host обходит поток вывода успешных данных (данных) PowerShell; хотя использование командлетов Format-* по-прежнему будет отправлять данные в поток успеха, эти данные больше не являются объектами input , а являются объектами, представляющими инструкции по форматированию .

Упрощенный пример:

Обратите внимание, что столбец two для 2-го объекта пуст, а его столбец three не печатается вообще, потому что только свойства 1-го объекта вывода определяют выходные столбцы.

С помощью явного использования Out-Host или командлета форматирования вы можете принудительно форматировать две команды по отдельности:

Обратите внимание, как теперь отображаются столбцы каждого объекта, которым предшествует заголовок для конкретного объекта.

Источник

Почему Get-WmiObject не работает при удаленном запуске с помощью Invoke-Command?

Я пытаюсь создать простой модуль «get-ProcessInfo.ps1», который будет использоваться с фреймворком PowerShell (судебная экспертиза / IR) под названием Kansa. Команда представляет собой простой лайнер, который вызывает Get-WMIObject win32_process и передает его в Select-Object. Затем Kansa СЛЕДУЕТ экспортировать данные в CSV с помощью командлета Export-Csv. Сценарий работает без проблем на моем локальном хосте, однако он не работает при удаленном запуске (в Windows) с помощью командлета Invoke-Command в Kansa. Мой журнал ошибок показывает get-ProcessInfo.ps1 «Невозможно найти процесс с идентификатором процесса ####» для каждого идентификатора процесса. Другие модули запускаются на удаленных хостах без проблем, поэтому я знаю, что аутентифицируюсь как администратор. Поэтому я думаю, что столкнулся с ошибкой разрешений или, возможно, с проблемой аутентификации с Wmi. Я запускаю это в домене Windows, из окна Windows, через учетную запись администратора домена.

Я попытался реплицировать вызов WmiObject, как показано в другом модуле Kansa, но он все еще не производил данные с удаленных хостов. — https://github.com/davehull/Kansa /blob/master/Modules/Process/Get-ProcsWMI.ps1

Я попытался понять, что происходит в скрипте InjectedThreads.ps1, поскольку он без проблем использует WmiObject удаленно, но это немного не по мне. Насколько я понял, похоже, что WmiObject «неуправляемый» (не аутентифицирован? / Не наследует Kerberos от PowerShell?) — https://github.com/davehull/Kansa/blob/master/Modules/Process/Get-InjectedThreads.ps1

Я пробовал несколько вариантов аутентификации, выдачи себя за другое лицо и привилегий Wmi. Который, к сожалению, по-прежнему не производит удаленных данных. — https://blogs.msmvps.com/ richardsiddaway / 2011/08/04 / authentication-impersonation-and-privileges /

Наконец, поскольку get-WmiObject технически устарел, я попытался использовать несколько вариантов командлета Get-CIMInstance в пользу Get-CIMInstance.

Вот код из модуля, который я пытаюсь создать, get-ProcessInfo.ps1

Ожидаемые результаты должны представлять собой список процессов и связанную с ними информацию, которая работает на моем локальном компьютере и не возвращает никаких данных (только ошибки) при удаленном запуске с помощью Invoke-Command в Kansa.ps1.

Может ли кто-нибудь указать мне в правильном направлении, что именно здесь происходит, и как я могу решить эту проблему?

* В качестве примечания, этот сценарий запускается через WinRM (Invoke-Command) на удаленном хосте, поэтому вопрос о вводе учетных данных исключен, как и жестко закодированные учетные данные.

Источник

Не работает get wmiobject

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Asked by:

Question

I ran into an issue on remote systems when running a script that grabs system info. It works fine on my laptop, but for some reason, it fails to work on some remote systems. They are about 3-5 years old, so I assume they are missing something, but I could use some help trying to figure out how to fix it. Here is the simple code I use to get the Monitor info:

All replies

What version are you querying. WS2008 and WS2008R2 do not support this class.

If you can please install Management Framework 5.0 to your remote systems to upgrade your PowerShell version: https://www.microsoft.com/en-us/download/details.aspx?id=50395

Please note that you need at least Windows 7 SP1 or Windows 2008R2 SP1 installed, and .NET Framework 4.5 or above.

Gilles Tremblay
MCSE Server | Desktop | Messaging | Collaboration | Productivity | Mobility | Cloud Platform and Infrastructure

Dont forget to mark as Answered if you found this post helpful.

DISCLAIMER: This post is provided «AS IS» with no warranties of any kind, either expressed or implied, and confers no rights. Always test before!

You can deploy using a GPO or SCCM.

Gilles Tremblay
MCSE Server | Desktop | Messaging | Collaboration | Productivity | Mobility | Cloud Platform and Infrastructure

Dont forget to mark as Answered if you found this post helpful.

DISCLAIMER: This post is provided «AS IS» with no warranties of any kind, either expressed or implied, and confers no rights. Always test before!

You could use vbscript to acheive this:

Set colItems = objWMIService.ExecQuery( «Select * from Win32_DesktopMonitor» )

For Each objItem in colItems
Wscript.Echo «Availability: « & objItem.Availability
Wscript.Echo «Bandwidth: « & objItem.Bandwidth
Wscript.Echo «Description: « & objItem.Description
Wscript.Echo «Device ID: « & objItem.DeviceID
Wscript.Echo «Display Type: « & objItem.DisplayType
Wscript.Echo «Is Locked: « & objItem.IsLocked
Wscript.Echo «Monitor Manufacturer: « & objItem.MonitorManufacturer
Wscript.Echo «Monitor Type: « & objItem.MonitorType
Wscript.Echo «Name: « & objItem.Name
Wscript.Echo «Pixels Per X Logical Inch: « & objItem.PixelsPerXLogicalInch
Wscript.Echo «Pixels Per Y Logical Inch: « & objItem.PixelsPerYLogicalInch
Wscript.Echo «PNP Device ID: « & objItem.PNPDeviceID
Wscript.Echo «Screen Height: « & objItem.ScreenHeight
Wscript.Echo «Screen Width: « & objItem.ScreenWidth
Next

I had this script for years, I found in searching the web at that time.

Gilles Tremblay
MCSE Server | Desktop | Messaging | Collaboration | Productivity | Mobility | Cloud Platform and Infrastructure

Dont forget to mark as Answered if you found this post helpful.

DISCLAIMER: This post is provided «AS IS» with no warranties of any kind, either expressed or implied, and confers no rights. Always test before!

I don’t understand how a VB script can get the info but the Powershell version won’t. What does VBS rely on since it’s using the same Namespace. I was so close to get this huge script to work, but now I’ve hit a wall with this newest error. I would like to get this working without having to push PS V4/5 to the systems first. It worked before using a different method but I accidentally deleted it. I thought I found the old way again but I have not been able to find it again. This script was made by someone else 2 years ago, but I am just updating it to make it faster and easier to understand. Any help would be great.

It all depends on which system you are querying and not on the source system.

WMI resides on the remote system.

You could use vbscript to acheive this:

Set colItems = objWMIService.ExecQuery( «Select * from Win32_DesktopMonitor» )

For Each objItem in colItems
Wscript.Echo «Availability: « & objItem.Availability
Wscript.Echo «Bandwidth: « & objItem.Bandwidth
Wscript.Echo «Description: « & objItem.Description
Wscript.Echo «Device ID: « & objItem.DeviceID
Wscript.Echo «Display Type: « & objItem.DisplayType
Wscript.Echo «Is Locked: « & objItem.IsLocked
Wscript.Echo «Monitor Manufacturer: « & objItem.MonitorManufacturer
Wscript.Echo «Monitor Type: « & objItem.MonitorType
Wscript.Echo «Name: « & objItem.Name
Wscript.Echo «Pixels Per X Logical Inch: « & objItem.PixelsPerXLogicalInch
Wscript.Echo «Pixels Per Y Logical Inch: « & objItem.PixelsPerYLogicalInch
Wscript.Echo «PNP Device ID: « & objItem.PNPDeviceID
Wscript.Echo «Screen Height: « & objItem.ScreenHeight
Wscript.Echo «Screen Width: « & objItem.ScreenWidth
Next

I had this script for years, I found in searching the web at that time.

Gilles Tremblay
MCSE Server | Desktop | Messaging | Collaboration | Productivity | Mobility | Cloud Platform and Infrastructure

Dont forget to mark as Answered if you found this post helpful.

DISCLAIMER: This post is provided «AS IS» with no warranties of any kind, either expressed or implied, and confers no rights. Always test before!

Источник

Не работает get wmiobject

This forum is closed. Thank you for your contributions.

Answered by:

Question

I am trying to get a simple get-wmiobject win32_process from a machine in the domanin, but using a different credential
$credential = New-Object System.Management.Automation.PSCredential («admsql», (Get-Content C:\scripts\securestring.txt | convertto-securestring))
Get-WmiObject win32_process -ComputerName ‘10.2.0.56’ -Credential $credential

Also I have tried with

Get-WmiObject win32_process -ComputerName ‘10.2.0.56’ -Credential $credential -Impersonation Impersonate -Authentication PacketIntegrity

The admsql account in the machine is local adm and all the privilegies are in the dcomcnfg.

I have no idea what is going on. Can you help me guys ?

Answers

WMI does not use PSSession. It is not a valid question. WMI does not use WinRM. It uses DCOM.

First we need the exact and complete error message. Access denied can be for many reasons.

IF anyone has attempted to alter the WMI settings this can happen. I just finished with one client who started playing with WMI and DCOM settings. Nothing works now.

You cannot authenticate with a IP string. You must use the machine name and the account name.

You cannot impersonate to the local machine.

In a default setup this will always work.

Get-WmiObject Win32_ComputerSystem -Computer remotepc -credential remotepc\adminccount.

A SQLAdmin account is not a computer admin account unless it has been added to local admins.

Well, I am using normally by IP in other machines and it is working fine. I dont think that is a problem

The admsql is in the local adms in each computer. It seems to be something in the machine. Firewall is disable also

What is the exact and complete error message.

Does the machine have more than on IP?

Have you tried to restart the machine?

If all of this clear then run WMIDiag and fix all problems found.

IP will fail under some circumstances such as multiple IPs. That is why it is better to use the machine name.

See http://msdn.microsoft.com/en-us/library/aa826699(v=vs.85).aspx for more information on this (The «Handling Remote Connections Under UAC» section, specifically.)

Their recommendation is to use a domain account that is a member of the local Administrators group, so your token doesn’t get filtered by UAC. If you use a local account (other than the built-in Administrator), you get filtered by UAC, and your Administrators permissions are ignored.

If you absolutely must use local accounts (typically only in a workgroup environment), this snip from the article may be helpful:

Disabling Remote UAC by changing the registry entry that controls Remote UAC is not recommended, but may be necessary in a workgroup. The registry entry is HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system\LocalAccountTokenFilterPolicy. When the value of this entry is zero (0), Remote UAC access token filtering is enabled. When the value is 1, remote UAC is disabled.

Источник

Читайте также:  Не работает вентилятор охлаждения вольво с60
Оцените статью