Отправить результаты PowerShell в HTTP

Извините за то, что я новичок в этом, но я хочу кое-что узнать об отправке результатов PowerShell на страницу PHP для дальнейшей обработки.

Я попробовал этот код:

$test1 = "test"$postParams = @{test=$test1}
Invoke-WebRequest -Uri http://bu01/stats/input.php -Method POST -Body $postParams

Что работает нормально, PHP получает тест строки в $ _POST [‘test’]

Но при попытке разобрать больше данных, вот так:

$test1 = Get-WMIobject win32_logicaldisk | select-object DeviceID,FreeSpace,Size
$postParams = @{test=$test1}
Invoke-WebRequest -Uri http://bu01/stats/input.php -Method POST -Body $postParams

Все, что я получил, это «System.Object []».

Пожалуйста, объясните, как отправить его на PHP.

Спасибо!

ОБНОВИТЬ:
Спасибо за ваши советы. Я сделал следующий скрипт с foreach для публикации каждой «строки» в отдельном веб-запросе. Который пока работает отлично. Больше не тестирование с использованием жесткого диска, но с пробелами в базе данных Exchange, но идея та же.

$dbs = Get-MailboxDatabase -Status | select-object Name, DatabaseSize, AvailableNewMailboxSpace
foreach ($a in $dbs){
$data = $a.Name+','+$a.DatabaseSize.ToKB()+','+$a.AvailableNewMailboxSpace.ToKB()
$postParams = @{data=$data}
Invoke-WebRequest -Uri http://bu01/stats/input.php -Method POST -Body $postParams
}

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

1

Решение

По сути, ваш первый пример может быть приведен к HTTP-запросу, так как это простой текстовый фрагмент. Ваш второй пример, однако, приводит к объекту System.Object (угадайте, что?). В этом случае PowerShell не может выполнить приведение типов за вас, поскольку полезная нагрузка HTTP должна быть чем-то текстовым. Если бы вы делали что-то вроде $ test1 [0] .DeviceID.toString (), это, скорее всего, сработало бы — для первого объекта, по крайней мере. Кстати, .toString () может не понадобиться — это зависит от «типа» атрибута DeviceID. Чтобы определить это, выполните $ test1 [0] .DeviceID.GetType ().

Если вам нужно обработать каждый экземпляр, возвращенный вашим вызовом WMI, вам нужно использовать Foreach-Object {}, публикуя каждый экземпляр отдельно. ИЛИ … используйте Foreach-Object {}, чтобы объединить соответствующую информацию и опубликовать ее как одну текстовую строку с соответствующим разделением.

Вам также может понадобиться использовать UrlEncode (вызов .NET) для кодирования любых нечетных символов в ваших данных.

0

Другие решения

Это потому что $test1 это System.Object массив, а не строковые данные. Быстрое и грязное решение будет:

$test1 = Get-WMIobject win32_logicaldisk | select-object DeviceID,FreeSpace,Size
$postParams = @{test=($test1 | out-string)}
Invoke-WebRequest -Uri http://bu01/stats/input.php -Method POST -Body $postParams

Если вы хотите работать с данными на php-сайте, более чистым решением было бы разделить данные на несколько параметров, чтобы вам было легче получить к ним доступ.

1

По вопросам рекламы [email protected]