【问题标题】:Force Powershell to create AD user folder when setting HomeDirectory value设置 HomeDirectory 值时强制 Powershell 创建 AD 用户文件夹
【发布时间】:2023-03-27 04:36:01
【问题描述】:

New-ADUser 命令期间:-HomeDirectory = '\sharedrive\folder$%username%'

在 Powershell 中设置此值时,该值在主目录下显示为\\sharedrive\usersfolder$\%username%

结果:

但是,如果我在 Active Directory 用户和计算机菜单中手动输入相同的字符串,然后点击应用,它会自动填充到存在 %username% 的人的用户名,并在该共享驱动器上创建一个具有适当权限的文件夹,如下所示:

如何让 Powershell 自动填充此用户名并创建文件夹?只用用户名写出字符串是行不通的。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我认为这里有几个问题。 PowerShell 不知道如何解释您的输入字符串 '\sharedrive\folder$%username%'

    首先,它是一个文字字符串 - 所以即使 PowerShell 知道 $%username% 的意思是“将此值转换为用户名环境变量”,它仍会将其解释为在字符串中输入的文字字符。您似乎尝试做的是字符串插值,这要求您使用双引号 "

    其次,%username% 部分不是您在 PowerShell 中使用环境变量的方式。有几种方法可以获得这个值。 $env:USERNAME 应该可以在 Windows 上工作,[Environment]::username 也可以。

    所以你会想做这样的事情"\sharedrive\folder$([Environment]::username)"

    对于用户“someuser”,这将返回 "\sharedrive\foldersomeuser"

    【讨论】:

      【解决方案2】:

      您混淆了环境变量以及这些值在 ADUC 中的设置方式以及使用 Powershell cmdlet 时的设置方式。

      %username% 是一个可以翻译的 Windows 环境变量,因此当您点击“应用”按钮时,ADUC 控制台会翻译您正在创建的帐户中的用户名,然后在后台使用运行 ADUC 的人的凭据,然后(如果您点击“是”按钮)也重新授予该用户 Full Control 的权限。

      再一次,它是为您创建文件夹的 ADUC,它不会仅仅因为您在帐户对象上设置了这些属性而发生。如果您希望 Powershell 执行此操作,则需要手动或通过更多 Powershell 脚本自己执行文件夹创建和权限。

      【讨论】:

        【解决方案3】:

        试试这样的:

        $NewUser = Read-Host "please enter a username"
        New-ADUser -Name "$NewUser" -HomeDirectory "\sharedrive\folder\$NewUser"
        

        顺便说一句,Efie 关于环境变量的传递方式是绝对正确的,但另一件事是,他提到的那些变量将是运行脚本的人的变量,而不是您正在创建的用户。

        【讨论】:

        • 嗨,travis,你指的是哪个其他人?
        • Efie 的反应很棒,它只是在远程设备上运行以与 AD 交互时遗漏了环境变量周围的一些细节。怀疑论者是正确的。
        • 抱歉 travis 我和你同时编辑 xD
        • 没有汗水!我是新手!
        猜你喜欢
        • 2014-12-22
        • 1970-01-01
        • 2016-08-12
        • 2013-07-08
        • 1970-01-01
        • 1970-01-01
        • 2022-08-08
        • 2013-07-20
        • 1970-01-01
        相关资源
        最近更新 更多