AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 768028
Accepted
SimonS
SimonS
Asked: 2016-04-05 05:31:52 +0800 CST2016-04-05 05:31:52 +0800 CST 2016-04-05 05:31:52 +0800 CST

为什么我的登录脚本没有映射任何驱动器?

  • 772

我在 PowerShell 中编写了一个登录脚本。该脚本嵌入在 GPO 中,并在用户登录域时运行。

我的问题是,我在脚本中部署的驱动器没有被部署。我确信登录脚本会运行,因为在脚本结束时我会向自己发送一封电子邮件,并且我总是会收到它。所以运行脚本应该不是问题。$Error每次脚本运行时,我都会记录整个变量,并且没有迹象表明为什么会发生此错误。

我几乎可以肯定错误不在脚本本身 - 我认为它必须是权限错误。

我认为当我在运行脚本时指定参数时可以解决这个问题-NoProfile,但我不知道将它放在 GPO 的哪个位置。由于美观的原因,我不想要一个调用脚本的批处理文件:-)。

编辑:指定-noprofile没有解决问题

编辑:由于有评论说没有足够的关于如何映射驱动器的信息,我将整个映射部分粘贴在下面:

# UserOU as a parameter, value set in GPO
Param([string]$UserOU)

# preparing some stuff...
Import-Module .\SecureStringFunctions.psm1
[Byte[]]$key = (1..16)
$pw = Get-Content .\LocalAdminCred.txt | ConvertTo-SecureString -key $key

# Tried this to elevate the Script IF it's needed. Didn't solve my problem. works only on PS 4.0 but didn't solve the issue on my 5.0 machine
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) 
{ Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }

# Import CSV with drive information based on username and userOU to get every maps that the current user needs
# also replacing a string inside the CSV for current session to map the homedrive of each user
$Drives = (Get-Content .\NetworkDrives.csv) -replace "userhome",$env:username | ConvertFrom-CSV -Delimiter ';' | ? {
    (($_.Group.split(',') -contains $UserOU) -or ($_.Group.split(',') -contains $env:username)) -and (!(Test-Path $_.Letter))
} 

# When I export the $Drives Variable at this point, all drives were read correctly, so the failure must occur in the mapping

# map all drives for current user. Drives to DMZ with password in plain text because ".mapnetworkdrive" only accepts plain text.
$Drives | % {
    if (![system.string]::IsNullOrEmpty($_.Username)) {
        if (($UserOU -like 'admin*') -and (($_.Server -ne $env:computername) -or ([system.string]::IsNullOrEmpty($_.Server)))) { 
            Continue
        }
        [string]$pwplain = ConvertFrom-SecureString $pw -AsPlainText -Force
        $Map = New-Object -comobject Wscript.Network
        $Map.MapNetworkDrive($_.letter,$_.path,$false,$_.username,$pwplain)
        $pwplain = ""
    } else { 
        $Map = New-Object -comobject Wscript.Network
        $Map.MapNetworkDrive($_.letter,$_.path,$false)    
    }
}
windows
  • 2 2 个回答
  • 25962 Views

2 个回答

  • Voted
  1. Best Answer
    SimonS
    2016-04-06T06:36:19+08:002016-04-06T06:36:19+08:00

    我现在有办法了。

    是什么造成了您的登录脚本不想映射驱动器的这种行为?

    如果你有 Windows 10,你想使用 Edge、计算器和 PDF 应用程序。微软说你需要为此启用 UAC,否则它将无法工作。因此,您通过 GPO (Reg. Key EnableLua) 启用 UAC。https://technet.microsoft.com/en-us/library/dd835564%28v=ws.10%29.aspx

    但是:如果您在 GPO 中部署登录脚本,并且您的用户是他登录的计算机上的本地管理员 - 在我的情况下是在每台计算机上,因为我是域管理员 - UAC 将删除您的帐户对于非特权用户,正如我们所知,如果它们不在同一上下文中运行,您将不会将驱动器部署到您的管理员帐户中。

    这实际上是设计使然,是由 UAC 的工作方式造成的。当您是管理员组的成员并登录时,您的帐户会被 UAC 破坏为非特权用户。此运行上下文与您在右键单击命令提示符并以管理员身份启动时获得的上下文完全分开。您可能已经注意到,在一个上下文中连接的网络驱动器在另一个上下文中不可见。问题是基于 GPO 的登录脚本是在管理员上下文中执行的,而不是在普通用户上下文中。

    引自http://pcloadletter.co.uk/2010/05/15/missing-network-drives/

    因此,您将禁用 UAC,您的 GPO-Logon-Script 将起作用。你很高兴,但随后你意识到你不能再使用边缘了。

    那么我们如何启用 UAC 并让我们的登录脚本正常工作呢?

    我这样做是由 Microsoft不支持的Registry Hack 完成的。我想这是您系统安全的一个漏洞,如果您以与我相同的方式执行此操作,请记住这一点:

    HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System
    New Entry: Type: DWORD Name: "EnableLinkedConnections" Value: 1
    

    还有 BAM!您可以使用登录脚本、UAC、edge 等。

    您可以尝试的其他事情 - 我还没有尝试过任何这些:

    • 在存储在 GPO 中的批处理脚本中调用您的 PS 文件
    • 将您的 PS 脚本设置为 GPO 内的计划任务

    因此,希望这对其他登录脚本有问题的管理员有用。

    干杯!

    • 6
  2. Ijustpressbuttons
    2016-04-05T14:40:53+08:002016-04-05T14:40:53+08:00

    我认为您调用正在导入的文件可能存在您的问题。这些文件是否存储在相关 GPO 的 sysvol 中?.\ 表示它正在与相关文件的脚本在同一目录中查找。
    现在,如果“获取内容”文件位于正确的位置,则可能是您正在调用可能尚未初始化的用户名环境变量。尝试使用 Brandyn 建议的日志测试正确的加载和变量。

    • 0

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve