如何使用Python获取管理员权限以在csv文件中写入Windows用户名?

9
我想在csv文件中写入Windows用户名。我在Linux上编写了这个脚本,通过krdc和RDP协议连接到Win10 PC。我使用该远程桌面应用程序共享我的Linux驱动器,并在Win10中从该共享磁盘运行此脚本。
如果我以管理员身份通过命令提示符运行它,则会按预期运行。但是,如果我以普通用户身份运行它并确认UAC为Yes,则不会创建输出文件。
如何作为普通用户运行此脚本,回答Yes到UAC并将文件写入我在krdc远程应用程序中挂载的驱动器中,其中Win10将该驱动器视为\\TSCLIENT
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import ctypes
import sys
import subprocess


def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if is_admin():
    subprocess.call(['wmic', '/output:usracc.txt', 'useraccount', 'list', 'full', '/format:csv'])
else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

/INTERACTIVE:OFF? - dani herrera
@danihp 这不仅仅是关于 wmic,而是关于每个需要提升权限的脚本。但是我想我找到了问题所在。我使用 Kubuntu 编写代码并在 Win10 上进行测试。我使用 krdc 远程应用程序从 Kubuntu 访问 Win10。我将我的 Kubuntu 硬盘驱动器挂载到 Win10 上。Win10 将此驱动器视为 \\TSCLIENT。当我在 cmd 提示符中以管理员身份运行我的脚本时,一切正常。当我在启用 UAC 的 \\TSCLIENT 挂载驱动器上以普通用户身份运行它时,脚本不会以提升的方式运行,即使回答 UAC 时选择“是”。之后,我将我的脚本复制到了 Win10 PC 上,并以普通用户身份运行,UAC 可以工作。 - Hrvoje T
这是Win10的bug还是正常行为我不知道。有时,当我尝试在已挂载的位置(例如U:驱动器)中以管理员身份打开cmd控制台时,它会将我放置在C:\Windows\system32 ,显示“系统找不到指定的驱动器。”的消息,但使用普通用户进行相同的操作,我可以在远程位置打开控制台。 - Hrvoje T
以管理员身份运行和普通用户之间没有太大的区别(如果管理员没有将该目录或服务开放给有效用户)。以管理员身份运行不会给您任何特殊权限。如果您拥有特定的权限,它会询问您是否确定使用它。我不明白如何使用远程桌面连接到Linux机器(我认为这是新模式,只有ROOT可以访问虚拟目录)。 - dsgdfg
1个回答

2

如果您想在没有管理员权限的情况下完成此操作,您可以:

import os
import csv

userList = os.popen("net user").read().split()[5:-4]

outFile = open("userList.csv", 'w')
with outFile:
    fileWriter = csv.writer(outFile)

for user in userList:
    print(user)
    fileWriter.writerow([user]) 

那段代码将会给你生成一个名为“userList.csv”的文件,其中包含所有非管理员用户的信息。

谢谢,但我需要提升这个脚本,以便我可以将解决方案与其他脚本一起使用,否则这些脚本无法正常工作。在提问后我才发现这是rdp挂载磁盘和UAC问题。在本地,一切都按预期工作。 - Hrvoje T
这个人在这里做了类似的事情 @sundar_ima here - Ricardo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接