首页 > 解决方案 > Powershell - 提取特定字符串

问题描述

我需要从一个 API 调用中获取一个令牌,以便在另一个 API 调用中使用它。

我试图以某种方式提取 access_token 部分,将其定义为我在第二次调用中使用的变量。

我的命令:

Invoke-RestMethod -Uri $URI_TOKEN -Method Post -Headers $HEADERS_TOKEN -Body $BODY_TOKEN | Select-String -pattern access_token

输出:

@{access_token=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4dDdPZUhRa1prall4SW1NWko3YVROanFMeW11WngwNWhvWTBxekxBbk1jIn0.eyJleHAiOjE2MTI4Mjg0OTMsImlhdCI6MTYxMjgyODQzMywianRpIjoiZGZkNTY5ZGUtYWUyZ
i00NDRhLTk0NTgtNzY2NWYwN2UzZjkyIiwiaXNzIjoiaHR0cHM6Ly92ZXJpZmljYXRpb24taWFtLXdydS50ZWxpdGNhYXNtZ210LnQtaW50ZXJuYWwuY29tL2F1dGgvcmVhbG1zL21hc3RlciIsInN1YiI6IjMwZjIyZDFhLTYxZTQtNGM5YS05OGU1LTU0MjhmZWM1M
zViMiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFkbWluLWNsaSIsInNlc3Npb25fc3RhdGUiOiI4NjRlODYxNi00NTJlLTRiNGItYjBkMC1kMjIxYjEwNDA5OWUiLCJhY3IiOiIxIiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlL
CJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiJ9.Kz4zsCKyFFrvxm4ZLaf-pE2iDQOFF_Y_HPSTWslVBKqu9QnMaPVQINWENvcydP5SKg4ABza3OGkLreBhPmfeDGupRVIQNU5h4C5AewbVcNke1Drvi2CE3nEopqigIYE1Ab_GwovXT8MuXt1NTbpPtLgnjVuj-Q4P
pHKvdtHomf_DY1PTR9aFQ6CLohHmLEjBiOtOcnce0r6ZI_--XFDL81UkOOEW062LMYqyUV-jb8uRjlbUuKWHdUKnlr2H_bQNFQ5vVvi0BgevDrBc6E4oECiMnpIVFitXVIF6ZtPhKT-lyGkyZ7oaXERT-v_AcQLy2-t-cscsd0bGCL2zbUOELw; expires_in=60; r
efresh_expires_in=1800; refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNTkxZWEyZC1jMDM1LTQ4YWUtYWY0Yi0wYjc1ZGY4YzA5ZmIifQ.eyJleHAiOjE2MTI4MzAyMzMsImlhdCI6MTYxMjgyODQzMywianRpIjoiMTA
wNjZhYWYtMGIzNC00MTBjLWI2MTItNmFmNDI5NjAwNDQ2IiwiaXNzIjoiaHR0cHM6Ly92ZXJpZmljYXRpb24taWFtLXdydS50ZWxpdGNhYXNtZ210LnQtaW50ZXJuYWwuY29tL2F1dGgvcmVhbG1zL21hc3RlciIsImF1ZCI6Imh0dHBzOi8vdmVyaWZpY2F0aW9uLWl
hbS13cnUudGVsaXRjYWFzbWdtdC50LWludGVybmFsLmNvbS9hdXRoL3JlYWxtcy9tYXN0ZXIiLCJzdWIiOiIzMGYyMmQxYS02MWU0LTRjOWEtOThlNS01NDI4ZmVjNTM1YjIiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoiYWRtaW4tY2xpIiwic2Vzc2lvbl9zdGF0ZSI
6Ijg2NGU4NjE2LTQ1MmUtNGI0Yi1iMGQwLWQyMjFiMTA0MDk5ZSIsInNjb3BlIjoicHJvZmlsZSBlbWFpbCJ9.fwY1IUnWkS-pMzy_-pBiqch4dL4eLMvCPSKaAsGeqqw; token_type=bearer; not-before-policy=0; session_state=864e8616-452e-4
b4b-b0d0-d221b104099e; scope=profile email} 

此输出包含我不需要的项目。是否可以提取以 access_token=blahblah 开头的字符串,直到;只有符号(基本上直到 expires_in=60)?

提前谢谢了!

标签: powershellapi

解决方案


由于您已证明 的输出Invoke-RestMethod是 PSCustomObject,您可以通过执行以下操作简单地引用 access_token 属性:

$token = (Invoke-RestMethod -Uri $URI_TOKEN -Method Post -Headers $HEADERS_TOKEN -Body $BODY_TOKEN).access_token

推荐阅读