在windows pc /上为每个用户运行一行代码

时间:2017-12-12 15:29:45

标签: batch-file cmd subinacl

对于剧本:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(new File("abc.xml")));

Result output = new StreamResult(new File("abc.xml"));
Source input = new DOMSource(doc);


// xml processing instruction and comment node
ProcessingInstruction xmlpi = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"");
Comment comment = doc.createComment("DO NOT EDIT THIS FILE");

// first transform the processing instruction and comment
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(xmlpi), output);
transformer.transform(new DOMSource(comment), output);
// then the document
transformer.transform(input, output);

此脚本授予Subinacl用户对某些服务的管理权限。但是,您可以看到这仅适用于计算机%Computername%上的一个名为(user)的用户。

我想知道是否有可能为本地计算机上的所有用户运行以Subinacl开头的2行。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用WMIC获取计算机上定义的用户名列表,然后使用FOR迭代每个用户名。下面的代码示例可以帮助您入门。

请注意,以下内容不会尝试过滤掉内置帐户或其他“特殊”帐户。我也不确定引用适用于SUBINACL的语法。我建议您在删除ECHO电话前面的SUBINACL行之前,先查看所需的行为。

@echo off
title Applying Noah service rights, please wait...
cd c:/subinacl
FOR /F "usebackq" %%a IN (`WMIC UserAccount GET Name`) DO CALL :process_account "%%a"
pause
REM exit batch script file
EXIT /B

:process_account
SETLOCAL
REM strip any quotes from argument
SET ACCT=%~1
REM skip blank names
IF "%ACCT%"=="" EXIT /B
REM skip "Name" header from WMIC
IF "%ACCT%"=="Name" EXIT /B
ECHO Processing account: %1
REM remove the ECHO in front of SUBINACL once tested
ECHO subinacl /service NoahServer /grant="%Computername%\%ACCT%"=TOP
ECHO subinacl /service NoahClient /grant="%Computername%\%ACCT%"=TOP
REM return to CALLer
EXIT /B