【问题标题】:Multiple IF Statements under a Parameter一个参数下的多个 IF 语句
【发布时间】:2018-07-26 23:36:13
【问题描述】:

简介

我的任务是创建一个用于我们的一位客户的用户管理 PowerShell 脚本,以便我们可以轻松管理用户并自动化我们的许多用户创建过程。


问题

我们的客户坚持使用登录脚本而不是 GPO 来为用户映射驱动器。我已经在脚本中添加了一个登录脚本生成器,但是我终其一生都无法弄清楚如何指定哪些驱动器实际上需要添加到登录脚本中。


如何管理驱动器映射

在我们客户的网络中管理驱动器映射的方式是基于工作角色 + Active Directory 组。他们在 E-Form 上请求需要映射哪些驱动器,然后我们查看 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

【问题讨论】:

  • 我真的不明白这与您昨天提出的问题有何不同/或者您在这里有什么具体问题。预期的输出会很好。
  • @Paxz 昨天我在问具体的方法。今天我有了这个方法,只是不太确定它是否正确,以及如何基于组运行多个驱动器。示例输出: $drives 需要输出 Net use N: "\\FILE0\DRIVE1" 然后换行 Net use D: "\\FILE0\DRIVE2" 希望这是有道理的

标签: powershell powershell-4.0


【解决方案1】:

我假设您想将多个驱动器放入变量中,因此我的解决方案是循环遍历 $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

【讨论】:

  • 不是你需要的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多