首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python表示Powershell "ToBase64String“函数

如何使用Python表示Powershell "ToBase64String“函数
EN

Stack Overflow用户
提问于 2022-03-28 04:09:42
回答 1查看 193关注 0票数 0

因为我想调用windows shell来运行命令并从Python获取输出,所以我尝试在Python中对命令字符串进行编码,然后使用

代码语言:javascript
运行
复制
> powershell -EncodedCommand <base64 string from Python encode>

由于语法原因,它将通过一个错误。

Python中的代码看起来像

代码语言:javascript
运行
复制
s = '''Get-ADUser -Filter ('Surname -eq "aa" -and GivenName -eq "bb" -and Department -eq "cc"') | Select-Object -Property UserPrincipalName'''
bs = bytearray(s, 'utf-16')
base64.b64encode(bs)

但是,当我使用Powershell函数将命令字符串加密为base64字符串时

代码语言:javascript
运行
复制
PS > $bytes = [System.Text.Encoding]::Unicode.GetBytes("Get-ADUser -Filter ('Surname -eq `"aa`" -and GivenName -eq `"bb`" -and Department -eq `"cc`"') | Select-Object -Property UserPrincipalName")
PS > [Convert]::ToBase64String($bytes)

之后,我可以获得一个有效的base64字符串来在普通的windows上成功地执行这个命令。

代码语言:javascript
运行
复制
> powershell -EncodedCommand <base64 string encoded by Powershell in last two steps>

我的问题是这里有什么问题?还是我还有别的选择来解决这个问题?比如,使用PowerShell参数"-Command“直接运行?实际上,我试过了

代码语言:javascript
运行
复制
> powershell -Command "Get-ADUser -Filter ('Surname -eq `"aa`" -and GivenName -eq `"bb`" -and Department -eq `"cc`"') | Select-Object -Property UserPrincipalName"

但它通过了一个错误

代码语言:javascript
运行
复制
Get-ADUser : Error parsing query: 'Surname -eq `aa` -and GivenName -eq `bb` -and Department -eq `cc`' Error Message: 's
yntax error' at position: '13'.
At line:1 char:1
+ Get-ADUser -Filter ('Surname -eq `aa` -and GivenName -eq `bb` -and De ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Get-ADUser], ADFilterParsingException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Micr
   osoft.ActiveDirectory.Management.Commands.GetADUser
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-28 10:15:42

注意,bs = bytearray(s, 'utf-16')添加了字节顺序标记

代码语言:javascript
运行
复制
bs[0:2]
# bytearray(b'\xff\xfe')

要获得与PowerShell相同的结果,请使用

代码语言:javascript
运行
复制
bs = bytearray(s, 'utf-16-le')

然后:

代码语言:javascript
运行
复制
bs[0:20]
# bytearray(b'G\x00e\x00t\x00-\x00A\x00D\x00U\x00s\x00e\x00r\x00')

与PowerShell相同:

代码语言:javascript
运行
复制
$bytes[0..19] -join ' '
# 71 0 101 0 116 0 45 0 65 0 68 0 85 0 115 0 101 0 114 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71642299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档