使用服务帐户通过 python 访问文件
accessing files via python using a service account
我正在玩 windows 服务器 2012 r2。
我在服务器上有一些文件。我有一个单独的服务帐户,可以读取这些文件。我想做的是使用 python 通过网络共享访问文件(欢迎任何其他建议),但只能通过服务帐户。
PS: 我无法使用 RDP。
此任务的基础 WINAPI 是 [MS.Docs]: WNetAddConnection2W function 系列的一部分。
[GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions wrapper is [ActiveState]: Module win32wnet(这不是官方文档(此时我找不到任何文档)- 我不知道 URL 将有效,但这是我能找到的最好的)。
我准备了一个简单的例子。
code00.py:
#!/usr/bin/env python3
import sys
import os
import pywintypes
import win32wnet
CONNECT_INTERACTIVE = 0x00000008
HOST_NAME = "192.168.1.3"
SHARE_NAME = "Work"
SHARE_FULL_NAME = os.path.sep * 2 + os.path.sep.join((HOST_NAME, SHARE_NAME))
SHARE_USER = "cfati"
SHARE_PWD = "********"
def main():
net_resource = win32wnet.NETRESOURCE()
net_resource.lpRemoteName = SHARE_FULL_NAME
flags = 0
#flags |= CONNECT_INTERACTIVE
print("Trying to create connection to: {:s}".format(SHARE_FULL_NAME))
try:
win32wnet.WNetAddConnection2(net_resource, SHARE_PWD, SHARE_USER, flags)
except pywintypes.error as e:
print(e)
else:
print("Success!")
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
main()
备注:
- 密码被混淆(很明显)
这是最简单的功能(相当于您的命令),但是该功能可以做更多的事情:
有一点我想指出。如果你:
- 输入了一些无效的凭据,并且
- 取消注释
flags |= CONNECT_INTERACTIVE
行
然后会弹出一个凭据对话框
输出:
(py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use
New connections will be remembered.
There are no entries in the list.
(py35x64_test) e:\Work\Dev\Whosebug\q050602112>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code00.py
Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32
Trying to create connection to: \192.168.1.3\Work
Success!
(py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
OK \192.168.1.3\Work Microsoft Windows Network
The command completed successfully.
(py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use * /delete /y
You have these remote connections:
\192.168.1.3\Work
Continuing will cancel the connections.
The command completed successfully.
(py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use
New connections will be remembered.
There are no entries in the list.
我正在玩 windows 服务器 2012 r2。 我在服务器上有一些文件。我有一个单独的服务帐户,可以读取这些文件。我想做的是使用 python 通过网络共享访问文件(欢迎任何其他建议),但只能通过服务帐户。
PS: 我无法使用 RDP。
此任务的基础 WINAPI 是 [MS.Docs]: WNetAddConnection2W function 系列的一部分。
[GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions wrapper is [ActiveState]: Module win32wnet(这不是官方文档(此时我找不到任何文档)- 我不知道 URL 将有效,但这是我能找到的最好的)。
我准备了一个简单的例子。
code00.py:
#!/usr/bin/env python3
import sys
import os
import pywintypes
import win32wnet
CONNECT_INTERACTIVE = 0x00000008
HOST_NAME = "192.168.1.3"
SHARE_NAME = "Work"
SHARE_FULL_NAME = os.path.sep * 2 + os.path.sep.join((HOST_NAME, SHARE_NAME))
SHARE_USER = "cfati"
SHARE_PWD = "********"
def main():
net_resource = win32wnet.NETRESOURCE()
net_resource.lpRemoteName = SHARE_FULL_NAME
flags = 0
#flags |= CONNECT_INTERACTIVE
print("Trying to create connection to: {:s}".format(SHARE_FULL_NAME))
try:
win32wnet.WNetAddConnection2(net_resource, SHARE_PWD, SHARE_USER, flags)
except pywintypes.error as e:
print(e)
else:
print("Success!")
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
main()
备注:
- 密码被混淆(很明显)
这是最简单的功能(相当于您的命令),但是该功能可以做更多的事情:
有一点我想指出。如果你:
- 输入了一些无效的凭据,并且
- 取消注释
flags |= CONNECT_INTERACTIVE
行
然后会弹出一个凭据对话框
输出:
(py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use New connections will be remembered. There are no entries in the list. (py35x64_test) e:\Work\Dev\Whosebug\q050602112>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code00.py Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32 Trying to create connection to: \192.168.1.3\Work Success! (py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use New connections will be remembered. Status Local Remote Network ------------------------------------------------------------------------------- OK \192.168.1.3\Work Microsoft Windows Network The command completed successfully. (py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use * /delete /y You have these remote connections: \192.168.1.3\Work Continuing will cancel the connections. The command completed successfully. (py35x64_test) e:\Work\Dev\Whosebug\q050602112>net use New connections will be remembered. There are no entries in the list.