提问人:sanjacob 提问时间:4/18/2023 最后编辑:mklement0sanjacob 更新时间:4/19/2023 访问量:64
Powershell 组数因个人需求而异
Powershell number of groups variable to individual needs
问:
大家好,谢谢你的帮助,
我制作了这个脚本来创建具有 de AD 中所有详细信息的新用户。 正如你所看到的,用户可以提供 5 个组的修复编号,以将新创建的用户添加到提供的组中。我不想实现的是 分配给用户的组数可能是可变的,因为有些用户是 3 的成员,有些是 5 的成员,等等。
由于我对 PowerShell 非常陌生,我不确定这是否可能,并希望有任何正确方向的提示。
#New AD user creation with all details
#On the Param Part it will collect all the parameters for #the user creation by user input.
#It's meant to be done by user input, as the user who #does the job likes it like that.
param
(
[Parameter(Mandatory=$true)][String]$Vorname_Abstand_Nachname,
[Parameter(Mandatory=$true)][String]$Vorname,
[Parameter(Mandatory=$true)][String]$Initialen_Beispiel_Miguel_Santiago_MSA,
[Parameter(Mandatory=$true)][String]$Nachname,
[Parameter(Mandatory=$true)][String]$Standort,
[Parameter(Mandatory=$true)][String]$TelefonBüro,
[Parameter(Mandatory=$true)][String]$Emailadresse,
[Parameter(Mandatory=$true)][String]$Homepage,
[Parameter(Mandatory=$true)][String]$Strasse_Abstand_Hausnummer,
[Parameter(Mandatory=$true)][String]$Kantons_Kürzel,
[Parameter(Mandatory=$true)][String]$Postleitzahl,
[Parameter(Mandatory=$true)][String]$Handynummer,
[Parameter(Mandatory=$true)][String]$Job_Titel,
[Parameter(Mandatory=$true)][String]$Abteilung,
[Parameter(Mandatory=$true)][String]$Firmenname_Abstand_AG,
[Parameter(Mandatory=$true)][String]$Vorname_Punkt_Nachname,
[Parameter(Mandatory=$true)][String]$Gruppe1,
[Parameter(Mandatory=$true)][String]$Gruppe2,
[Parameter(Mandatory=$true)][String]$Gruppe3,
[Parameter(Mandatory=$true)][String]$Gruppe4,
[Parameter(Mandatory=$true)][String]$Gruppe5
)
New-ADUser
-Name "$Vorname_Abstand_Nachname"
-GivenName "$Vorname"
-Initials "$Initialen_Beispiel_Miguel_Santiago_MSA"
-Surname "$Nachname"
-DisplayName "$Vorname_Abstand_Nachname"
-Description "Login: $Vorname_Punkt_Nachname"
-Office "$Standort" -OfficePhone "$TelefonBüro"
-EmailAddress "$Emailadresse"
-HomePage "$HomePage"
-StreetAddress "$Strasse_Abstand_Hausnummer"
-City "$Standort" -State "$Kantons_kürzel"
-PostalCode "$Postleitzahl"
-UserPrincipalName "$Emailadresse"
-SamAccountName "$vorname_Punkt_Nachname"
-PasswordNeverExpires $true
-ScriptPath "genKIXTART.exe"
-HomeDirectory \\server\Users$\$vorname_Punkt_Nachname
-HomeDrive H
-MobilePhone "$Handynummer"
-Title "$Job_Titel"
-Department "$Abteilung"
-Company "$Firmenname_Abstand_AG"
-Manager "CN=Manager Name,OU=Intern,OU=Benutzer,OU=XXX,DC=xxx,DC=local"
-Path "OU=Intern,OU=Benutzer,OU=XXX,dc=xxx,dc=local"
-AccountPassword (Read-Host -AsSecureString "Gib ein Passwort an. Muss mindestens 8 Zeichen lang sein. Darf weder Vor- noch Nachnamen des Benutzers beinhalten, muss Gross- und Kleinbuchstaben als auch Zahlen und Sonderzeichen enthalten")
-Enabled $true
# This parts sets the users dial-in settings
Set-ADUser
-Identity $Vorname_Punkt_Nachname
-replace @{msNPAllowDialIn=$TRUE}
# This parts sets all the paramaeters for the country setting
Get-ADUser -SearchBase 'OU=Intern,OU=Benutzer,OU=QBIC,DC=QBIC,DC=LOCAL'
-filter * | Set-ADUser -Replace @{c="CH";co="Switzerland";countryCode="756"}
# This part adds the user to the provided groups
Add-ADPrincipalGroupMembership $Vorname_Punkt_Nachname
-MemberOf $Gruppe1,$Gruppe2,$Gruppe3,$Gruppe4
# This is the finishing part of the Script
Write-Host
-ForegroundColor Green 'All Done!'
Write-Host
-ForegroundColor Green 'Please press Enter to Exit'
Pause
答:
0赞
mklement0
4/18/2023
#1
声明一个数组类型的参数,可以向其传递可变数量的参数,用,
一个简化的例子:
注意:使用函数而不是脚本(文件)的唯一原因是以这种方式更容易演示解决方案(您可以将代码复制并粘贴到交互式会话中,而无需创建文件)。
*.ps1
重要的是块内的内容,您可以按原样使用它来替换脚本代码中的 , ..., 声明。
param(...)
$Gruppe1
$Gruppe5
块的语法是相同的,无论您是在创作函数还是脚本;另请参阅:
param(...)
# Declare a sample function.
function Foo {
param(
# Define a -Groups parameter as an array.
# Insert "[]" at the end of a type name to declare
# an array of that type; in the case at hand,
# [string[]] is an array of [string] elements.
[Parameter(Mandatory)] [string[]] $Groups
)
$Groups # Output for diagnostic purposes
}
# Call the function with 2 groups
Foo -Groups Group1, Group2
要将它们全部放在代码的上下文中(省略附带部分;查找):$Groups
param
(
[Parameter(Mandatory = $true)][String]$Vorname_Abstand_Nachname,
[Parameter(Mandatory = $true)][String]$Vorname,
[Parameter(Mandatory = $true)][String]$Initialen_Beispiel_Miguel_Santiago_MSA,
[Parameter(Mandatory = $true)][String]$Nachname,
[Parameter(Mandatory = $true)][String]$Standort,
[Parameter(Mandatory = $true)][String]$TelefonBüro,
[Parameter(Mandatory = $true)][String]$Emailadresse,
[Parameter(Mandatory = $true)][String]$Homepage,
[Parameter(Mandatory = $true)][String]$Strasse_Abstand_Hausnummer,
[Parameter(Mandatory = $true)][String]$Kantons_Kürzel,
[Parameter(Mandatory = $true)][String]$Postleitzahl,
[Parameter(Mandatory = $true)][String]$Handynummer,
[Parameter(Mandatory = $true)][String]$Job_Titel,
[Parameter(Mandatory = $true)][String]$Abteilung,
[Parameter(Mandatory = $true)][String]$Firmenname_Abstand_AG,
[Parameter(Mandatory = $true)][String]$Vorname_Punkt_Nachname,
# Define a -Groups parameter as an *array*, instead of individual
# -Gruppe1, -Gruppe2, ... parameters.
# (Translate as needed, such as $Gruppen)
[Parameter(Mandatory)] [string[]] $Groups
)
# ...
# This part adds the user to the provided groups
# Pass the $Groups parameter value as-is (as an array) to -MemberOf
Add-ADPrincipalGroupMembership $Vorname_Punkt_Nachname -MemberOf $Groups
# ...
评论
0赞
sanjacob
4/19/2023
当我准确地测试了你写的东西(编辑后的代码)并且它起作用了。/ $Groups # 用于诊断目的的输出 / 部分是否被认为在控制台中显示提供的组?我认为在最终将创建的用户添加到它们之前,向运行脚本的用户显示预配的组会很棒。到目前为止,感谢您的耐心和帮助,我非常感谢:))。我真的开始喜欢 powershell,因为它使工作变得如此容易(:D本身即可工作)。现在将检查您上面的链接。
评论
$Vorname
"..."
Mandatory=$true
Mandatory
New-ADUser … -GivenName "$Vorname" …
New-ADUser … -GivenName $Vorname …
[Parameter(Mandatory=$true)]
[Parameter(Mandatory)]
=$true
-Description "Login: $Vorname_Punkt_Nachname"
-ScriptPath "genKIXTART.exe"
'...'