Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将powershell结果发送到HTTP_Php_Powershell - Fatal编程技术网

Php 将powershell结果发送到HTTP

Php 将powershell结果发送到HTTP,php,powershell,Php,Powershell,很抱歉,我是这方面的新手,但我想了解一些有关将powershell结果发送到PHP页面以供以后处理的信息 我尝试了以下代码: $test1 = "test" $postParams = @{test=$test1} Invoke-WebRequest -Uri http://bu01/stats/input.php -Method POST -Body $postParams 这很好,PHP在$u POST['test']中接收字符串测试 但是,当尝试解析更多数据时,如下所示: $test1

很抱歉,我是这方面的新手,但我想了解一些有关将powershell结果发送到PHP页面以供以后处理的信息

我尝试了以下代码:

$test1 = "test"
$postParams = @{test=$test1}
Invoke-WebRequest -Uri http://bu01/stats/input.php -Method POST -Body $postParams
这很好,PHP在$u 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编写了下面的脚本,将每个“行”发布到一个单独的web请求中。现在还可以。不再使用hdd空间进行测试,而是使用Exchange DB中的空格进行测试,但想法是一样的

$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
}

也许有人有一个很好的技巧可以将此转换为一个请求?这对于web服务器来说效率更高。

这是因为
$test1
是一个
系统对象
数组,而不是字符串数据。快速而肮脏的解决方案是:

$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站点上处理数据,更干净的解决方案是将数据拆分为多个参数,以便您可以更轻松地访问它们。

基本上,您的第一个示例可以强制转换为HTTP请求,因为它是一个简单的文本。然而,您的第二个示例产生了一个(猜猜怎么着?)System.Object。PowerShell随后无法为您执行类型强制,因为HTTP负载需要是文本内容。如果要执行类似于$test1[0].DeviceID.toString()的操作,则最有可能对第一个对象有效,至少对第一个对象有效。顺便说一句,可能不需要.toString()-它取决于DeviceID属性的“类型”。要确定这一点,请执行$test1[0].DeviceID.GetType()

如果需要处理WMI调用返回的每个实例,则需要使用Foreach对象{},分别发布每个实例。或使用Foreach对象{}连接相关信息,并将其作为一个适当分隔的文本字符串发布


您可能还需要使用UrlEncode(.NET call)对数据中的任何奇数字符进行编码。

关于更新:只需创建一个包含多个值的哈希表。示例:“$params=@{val1=$value1;val2=$value2}”