代码之家  ›  专栏  ›  技术社区  ›  Lasit Pant

使用服务帐户通过python访问文件

  •  2
  • Lasit Pant  · 技术社区  · 7 年前

    我正在玩Windows Server 2012 R2。 我在服务器上有一些文件。我有一个单独的服务帐户,可以读取文件。我想做的是使用python通过网络共享访问文件(欢迎任何其他建议),但只能通过服务帐户。

    我不能用RDP。

    1 回复  |  直到 7 年前
        1
  •  2
  •   CristiFati    6 年前

    潜在的 WiNAPI 此任务的s是 [MS.Docs]: WNetAddConnection2W function 家庭。

    这个 [GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions 包装是 [ActiveState]: Module win32wnet (这不是正式的医生(我现在找不到任何医生)-我不知道 统一资源定位地址 会有效的,但这是我能找到的最好的)。

    我准备了一个小例子。

    代码.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\StackOverflow\q050602112>net use
    New connections will be remembered.
    
    There are no entries in the list.
    
    
    (py35x64_test) e:\Work\Dev\StackOverflow\q050602112>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code.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\StackOverflow\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\StackOverflow\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\StackOverflow\q050602112>net use
    New connections will be remembered.
    
    There are no entries in the list.