【问题标题】:Partial change of home directory in Active DirectoryActive Directory 中主目录的部分更改
【发布时间】:2018-02-28 16:09:53
【问题描述】:

我们正在将数据从一个文件管理器迁移到另一个文件管理器,并且我们在其 Active Directory 配置文件下为一群用户设置了主目录。有些用户有\\\x.x.x.x\sharename\etc,有些有\\\hostname\sharename\etc,有些有\\\hostname.domain.global\sharename\etc

我需要将x.x.x.xhostnamehostname.domain.global 的第一部分替换为domain.global\sharename\etc 的新DFS 名称,其他所有内容保持不变。

我该怎么做?

谢谢。

【问题讨论】:

  • 我要提一提的是,每个用户都是独一无二的,因为在示例中的 \sharename 之后,他们之后还有一些其他文件夹,所以我不能将它们全部更改为 \\\domain.global\sharename \..
  • 我假设您的意思是新的 Dfs 名称是 domain.global 而不是 domain.global\sharename\etc?请用示例更新您的问题。
  • 您好,是的,新的 DFS 名称是 domain.global,例如 .. old: \\hostname\sharename\etc new \\domain.global\sharename\etc
  • 你可以使用正则表达式(见我的回答)。

标签: powershell active-directory partial home-directory


【解决方案1】:

您应该能够使用正则表达式。例子:

PS C:\> '\\1.2.3.4\sharename1\etc1' |
  Select-String '^\\\\[^\\]+\\(.+)' |
  ForEach-Object { "\\domain.global\{0}" -f $_.Matches[0].Groups[1].Value }
\\domain.global\sharename1\etc1

PS C:\> '\\hostname\sharename2\etc2' |
  Select-String '^\\\\[^\\]+\\(.+)' |
  ForEach-Object { "\\domain.global\{0}" -f $_.Matches[0].Groups[1].Value }
\\domain.global\sharename2\etc2

PS C:\> '\\hostname.domain.global\sharename3\etc3' |
  Select-String '^\\\\[^\\]+\\(.+)' |
  ForEach-Object { "\\domain.global\{0}" -f $_.Matches[0].Groups[1].Value }
\\domain.global\sharename3\etc3

正则表达式模式为:

^\\\\[^\\]+\\(.+)

这转换为:以 (^) 两个 \ 字符开头,获取 1 个或多个不是 \ 的字符,然后是单个 \,然后是一个或多个字符 (.+ )。 ( ) 捕获路径部分并使其在字符串替换中可用(即,$_.Matches[0].Groups[1].Value)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多