2024-09-17
有些梦想虽然遥不可及,但不是不可能实现。只要我足够的强。 --- 《秦时明月》 · 小学生
English
once again
: 再次
It's again possible
: 再次可行
Powershell 导出目录权限列表
要导出 D:\Sharing_Data
目录下一级子目录的用户权限列表,可以使用 PowerShell 或 命令提示符(Command Prompt) 中的 icacls
工具。以下是两种方法的详细步骤:
方法一:使用 PowerShell
-
打开 PowerShell
- 按
Win + X
,选择 Windows PowerShell(管理员) 或 Windows Terminal(管理员)。
- 按
-
运行以下脚本
# 设置共享目录路径
$sharedPath = "D:\Sharing_Data"
# 获取一级子目录
$subDirectories = Get-ChildItem -Path $sharedPath -Directory
# 创建一个空数组来存储权限信息
$permissionsList = @()
foreach ($dir in $subDirectories) {
# 获取当前子目录的ACL(访问控制列表)
$acl = Get-Acl -Path $dir.FullName
foreach ($access in $acl.Access) {
# 创建一个自定义对象来存储信息
$permission = [PSCustomObject]@{
Directory = $dir.Name
Identity = $access.IdentityReference
FileSystemRights = $access.FileSystemRights
AccessControlType = $access.AccessControlType
}
# 添加到数组中
$permissionsList += $permission
}
}
# 导出到CSV文件
$permissionsList | Export-Csv -Path "D:\Sharing_Data_Permissions.csv" -NoTypeInformation -Encoding UTF8
Write-Output "权限列表已成功导出到 D:\Sharing_Data_Permissions.csv" -
解释脚本内容
- 获取子目录:
Get-ChildItem -Path $sharedPath -Directory
获取D:\Sharing_Data
下的所有一级子目录。 - 获取权限:
Get-Acl
获取每个子目录的权限信息。 - 整理数据:将目录名、用户、权限类型等信息整理成表格形式。
- 导出CSV:将整理好的权限信息导出到
D:\Sharing_Data_Permissions.csv
文件中。
- 获取子目录:
-
查看导出的权限文件
导出的
D:\Sharing_Data_Permissions.csv
文件可以使用 Excel 或任何支持 CSV 格式的应用程序打开,方便查看和分析。
方法二:使用命令提示符中的 icacls
-
打开命令提示符
- 按
Win + R
,输入cmd
,然后按Enter
。
- 按
-
运行以下命令
cd /d D:\Sharing_Data
for /D %G in (*) do icacls "%G" >> D:\Sharing_Data_Permissions.txt注意:
- 如果你将此命令写入批处理文件(.bat),需要将
%G
替换为%%G
,即:for /D %%G in (*) do icacls "%%G" >> D:\Sharing_Data_Permissions.txt
- 如果你将此命令写入批处理文件(.bat),需要将
-
解释命令内容
for /D %G in (*)
:遍历D:\Sharing_Data
目录下的所有一级子目录。icacls "%G"
:获取每个子目录的权限信息。>> D:\Sharing_Data_Permissions.txt
:将权限信息追加到D:\Sharing_Data_Permissions.txt
文件中。
-
查看导出的权限文件
打开
D:\Sharing_Data_Permissions.txt
文件,即可查看各子目录的权限列表。
选择哪种方法?
- PowerShell 方法 更加灵活和强大,适合需要进一步处理和分析权限数据的场景。
icacls
方法 简单快捷,适合快速导出权限信息到文本文件。
根据你的需求选择合适的方法即可。如果需要更详细的权限信息或格式化的数据,推荐使用 PowerShell 方法。
额外提示
- 管理员权限:确保以管理员身份运行 PowerShell 或命令提示符,以避免权限不足导致无法读取某些目录的权限信息。
- 编码问题:在导出到 CSV 文件时,使用 UTF-8 编码可以避免中文字符显示为乱码。
- 权限说明:
IdentityReference
:表示用户或用户组。FileSystemRights
:表示具体的权限类型,如读取、写入、修改等。AccessControlType
:表示是允许(Allow)还是拒绝(Deny)权限。
开发gradle插件
创建一个自定义的 Gradle 插件 codegen-jooq-gradle-plugin
,其插件 ID 为 org.moonlit.jooq
,并在其中为 gradle-jooq-plugin
添加默认配置,可以按照以下步骤进行。整个过程包括设置插件项目、定义插件逻辑、添加默认配置、打包发布插件等。
以下是详细的步骤和代码示例:
1. 创建插件项目
首先,创建一个新的 Gradle 项目来开发你的插件。
mkdir codegen-jooq-gradle-plugin
cd codegen-jooq-gradle-plugin
gradle init --type java-gradle-plugin
这将创建一个基本的 Gradle 插件项目结构。
2. 配置 build.gradle
编辑 build.gradle
文件,添加必要的依赖和插件信息。
plugins {
id 'java-gradle-plugin'
id 'maven-publish'
id 'java'
}
group = 'org.moonlit'
version = '1.0.0'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.jooq:jooq:3.18.4' // 根据需要调整版本
implementation 'nu.studer:gradle-jooq-plugin:5.2.1' // 使用 gradle-jooq-plugin 的版本
}
gradlePlugin {
plugins {
codegenJooq {
id = 'org.moonlit.jooq'
implementationClass = 'org.moonlit.jooq.CodegenJooqPlugin'
displayName = 'Codegen JOOQ Gradle Plugin'
description = 'A custom Gradle plugin that extends gradle-jooq-plugin with default configurations.'
}
}
}
publishing {
publications {
pluginMaven(MavenPublication) {
from components.java
groupId = 'org.moonlit'
artifactId = 'codegen-jooq-gradle-plugin'
version = '1.0.0'
}
}
// 配置仓库,例如 Maven Central 或者本地仓库
repositories {
mavenLocal()
// maven {
// url = uri("https://your.repository.url")
// credentials {
// username = project.findProperty("repoUser") ?: ""
// password = project.findProperty("repoPassword") ?: ""
// }
// }
}
}
说明:
- 插件依赖:
nu.studer:gradle-jooq-plugin
是你要扩展的插件。 - 插件发布:配置了
maven-publish
插件以便将自定义插件发布到 Maven 仓库或本地仓库。
3. 创建插件实现类
在 src/main/java/org/moonlit/jooq/
目录下创建 CodegenJooqPlugin.java
文件。
package org.moonlit.jooq;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.provider.Property;
import org.jooq.gradle.JooqGenerate;
import nu.studer.gradle.jooq.JooqPluginExtension;
import nu.studer.gradle.jooq.JooqPlugin;
public class CodegenJooqPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
// 应用原始的 gradle-jooq-plugin
project.getPluginManager().apply("nu.studer.jooq");
// 获取 Jooq 插件的扩展
JooqPluginExtension jooqExtension = project.getExtensions().getByType(JooqPluginExtension.class);
// 设置默认配置
jooqExtension.getVersion().convention("3.18.4"); // 设置 JOOQ 版本
// 配置生成器
jooqExtension.generateAll(new Action<JooqGenerate>() {
@Override
public void execute(JooqGenerate generate) {
generate.getInputSchema().convention("public");
generate.getOutputDirectory().convention(new File(project.getBuildDir(), "generated-jooq"));
// 添加更多默认配置
generate.getGenerator().getName().convention("org.jooq.codegen.DefaultGenerator");
// 例如,设置目标包名
generate.getGenerator().getStrategy().getName().convention("org.jooq.codegen.DefaultGeneratorStrategy");
}
});
// 你可以在这里添加更多默认的配置,例如数据库连接、生成策略等
}
}
说明:
- 应用原始插件:首先应用
nu.studer.jooq
插件。 - 配置默认值:为
jooq
插件的扩展设置默认配置,如 JOOQ 版本、输入 schema、输出目录等。 - 扩展配置:可以根据需要添加更多默认配置,以简化使用者的配置。
4. 配置 plugin
元数据
确保 resources/META-INF/gradle-plugins/org.moonlit.jooq.properties
文件存在,并包含以下内容:
implementation-class=org.moonlit.jooq.CodegenJooqPlugin
这将告知 Gradle 使用哪个类作为插件的实现。
5. 打包和发布插件
本地发布
你可以将插件发布到本地 Maven 仓库,以便在本地测试。
./gradlew publishToMavenLocal
发布到远程仓库
如果你希望将插件发布到 Maven Central 或其他远程仓库,请确保在 build.gradle
中正确配置 publishing
部分,并根据目标仓库的要求提供认证信息。
6. 使用自定义插件
在需要使用该插件的项目中,按照以下步骤配置: