2

有人有通过 PowerShell 使用 Websense API 的经验吗?我需要将 curl 命令(我正在使用)转换为 Powershell,以便可以编写脚本。任何人都有任何有用的资源?我需要翻译的 curl 命令示例如下:

开始新的交易:

curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories/start

添加 API 管理的类别(HTTPS 请求中的所有数据):

curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories -d "{\"Transaction ID\":\"<transaction_ID_string>\",\"Categories\": [ {\"Category Name\": \"<name_string>\",\"Category Description\":\"<description_string>\",\"Parent\": <numeric_category_ID>}]}"

添加 URL(HTTPS 请求中的所有数据):

curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories/urls -d "{\"Transaction ID\": \"<transaction_ID_string>\",\"Category ID\": <numeric_ID>,\"URLs\":[\"https://www.new_url.com/\"]}" --cacert PolApiServer.crt

提交事务:

curl -k -u <username>:<password> -X POST https://<ps_ip_address>:<port>/api/web/v1/categories/commit?TransactionID="<id_string>"
4

3 回答 3

1

这里有一些方法可以做到这一点。1. 下载 curl.exe 并指向一个变量,然后将命令传递给它

$curlExe = "C:\download\curl-7.59.0\src\curl.exe"
& $curlExe -i -k -X POST -d '"{\"groupId\": xxxx}"' "https://site/site?access_token=zzzzzz" -s 

另一个是

 Invoke-RestMethod -uri https://site Get -Headers @{"x-api-key" = "mykey"} -ContentType "application/vnd.api+json" -Credential $adminCredential 

我希望这有帮助

于 2018-10-31T19:22:29.640 回答
1

我不会为你编写解释器,但它肯定是可能的......或者你可以curl.exe从 PowerShell 运行(显然,你需要安装curl.exe在你用来从 PowerShell 运行 curl 命令的机器上)。 .

查看Invoke-WebRequestInvoke-RestMethod- 这两个函数都表现出类似卷曲的行为。

编辑:

因此,curlPowerShell 中的命令只不过是Invoke-WebRequest.. run this:的别名,Get-Alias -Definition Invoke-WebRequest并查看输出。中的每个参数Invoke-WebRequest最多匹配一个curl开关。您所要做的就是查看curl文档,并将它们的参数与Invoke-WebRequest参数匹配。您要问的很多内容取决于您将 HTTP 请求发送到的 API/站点(curl以及Invoke-WebRequest发送 HTTP 请求)。例如,对 API/站点进行身份验证。如果站点使用基本身份验证,您会这样做在 PowerShell 中是这样的:

Invoke-WebRequest -Method Post -Uri "https://<ps_ip_address>:<port>/api/web/v1/categories/start" -Headers @{"Authorization" = "Basic %your_encoded_credentials_here%" }

.. curl -Xswitch 代表 HTTP 方法..Invoke-WebRequest -Method参数具有相同的目的.. 听起来你真的只需要阅读Invoke-WebRequestor Invoke-RestMethod- 两者的唯一区别是它们给你的返回。

我认为您对如何区分并最终解释curlto的困惑Invoke-WebRequest与您似乎对 HTTP 请求很陌生这一事实有关。这两个命令都发送 HTTP 请求 - 它们只是使用不同的开关 - 如果您了解每个命令如何处理 HTTP 请求,您可以将 from 解释curlInvoke-WebRequest..

更多信息:Invoke-WebRequestInvoke-RestMethod

还有大量关于如何仅在此站点上解释 / 的示例curlInvoke-WebRequestPowershell只需要复习一下 HTTP 请求以及如何curl处理它们以及如何处理它们的差异Invoke-WebRequest

于 2018-10-31T19:17:43.553 回答
0

您可以使用splatting将其转换为 PowerShell 语法。

PS> curl.exe '-k', 
 '-u', '<username>:<password>', 
 '-X', 'POST ', 
 'https://<ps_ip_address>:<port>/api/web/v1/categories/start'

PS> curl.exe '-k', 
 '-u', '<username>:<password>', 
 '-X', 'POST ', 
 'https://<ps_ip_address>:<port>/api/web/v1/categories',
 '-d', "{\"Transaction ID\":\"<transaction_ID_string>\",\"Categories\": [ {\"Category Name\": \"<name_string>\",\"Category Description\":\"<description_string>\",\"Parent\": <numeric_category_ID>}]}"

PS> curl.exe '-k', 
 '-u', '<username>:<password>', 
 '-X', 'POST ', 
 'https://<ps_ip_address>:<port>/api/web/v1/categories/commit?TransactionID="<id_string>"'

此命令将从 Windows 操作系统调用 curl.exe。要知道这个文件在哪里运行

PS> Get-Command curl.exe
于 2021-03-28T09:20:14.840 回答