简介
我的任务是创建一个供我们的客户使用的用户管理PowerShell脚本,以便我们可以轻松地管理用户并使许多用户创建过程自动化。
问题
我们的客户坚持使用GPO上的登录脚本来为用户映射驱动器。我已经在脚本中添加了一个登录脚本构建器,但是我一生都无法弄清楚如何指定实际需要添加到该登录脚本中的驱动器。
如何管理驱动器映射
在我们的客户网络上管理驱动器映射的方式是基于作业角色+ Active Directory组的。他们在电子表格上请求需要映射哪些驱动器,然后我们通过Active Directory查看哪个组有权访问请求的驱动器。然后,我们添加这些组。
我需要什么帮助
我决定管理此问题的方法是在参数'$ Drives'下具有多个IF语句。我不确定该怎么做。我想这样做的原因是,当它将输出写入登录脚本时,我只需要在输出中添加一个“ $ Drives”即可。
当前代码
注意:这可能并非全部按顺序进行,实际脚本上可能存在中间的代码。这只是相关代码。
$NewName = $SAMAccountName
$extension = ".bat"
$FileName = "$SAMAccountName$extension"
$ScriptDrive = "\\IPRemoved\scripts"
$Groups = Get-ADPrincipalGroupMembership $SAMAccountName | select name
$Drives = if ($Groups -contains 'Blah Blah Blah') {
Write-Output "Net Use N: "\\FILE0\DRIVE""
} else {
Write-Output ""
}
Write-Output "NET TIME \\FILE0 /SET /Y
$Drives
@echo off
REM -------------------------------
REM -- LANDesk v8.6.1 Installation --
REM -------------------------------
%LogonServer%\Netlogon\LANDesk\iDeploy.exe /F=%LogonServer%\Netlogon\LANDesk" `n`n|FT -AutoSize >>LoginScript.txt
Get-ChildItem LoginScript.txt | Rename-Item -NewName $FileName
Move-Item -Path ".\$FileName" -Destination $ScriptDrive
答案 0 :(得分:0)
我假设您要在变量中放入多个驱动器,所以我的解决方案是循环遍历$ Groups中的所有组名,并将它们添加到数组中供以后使用:
我们可以在此处使用像$ Drives = @()这样的普通数组,但是从性能的角度来看
System.Collections.ArrayList使用的内存更少,并且速度更快。
|需要Out-Null部分来防止add方法的索引输出。
$Drives = New-Object System.Collections.ArrayList
现在只需循环遍历所有组,然后将它们添加到$ Drives数组中,以便以后使用该变量。
foreach($Group in $Groups){
switch($group){
"Blah Blah Blah"{ $Drives.add("Net Use A: `"\\FILE1\DRIVE`"" | Out-Null)}
"Bluh Bluh Bluh"{ $Drives.add("Net Use U: `"\\FILE2\DRIVE`"" | Out-Null)}
"Bleh Bleh Bleh"{ $Drives.add("Net Use E: `"\\FILE3\DRIVE`"" | Out-Null)}
default{ Write-Host "Group not found"}
}
}
将所有需要的驱动器存储在$ Drives中后,您只需将它们写入文件或将它们附加到现有文件中即可。
到新文件:
$Drives | Out-File -FilePath "C:\path\file.txt"
要附加数据:
$Drives | Out-File -FilePath "C:\path\file.txt" -Append