Splatting on powershell 的正确语法是什么?
what is the right syntax for Splatting on powershell?
好的伙计们,我已经编辑了我的用户创建脚本,现在它几乎是完美的,除了一件事我想不通
如何生成散列 table 读取“$GivenName $Surname”的变量
并创建用户的名称,因为现在它正在创建没有名称参数的用户
或者我需要在 csv 文件中为 $GivenName 和 $surname 创建 header
cls
#get the csv file
$filepath = import-csv "C:\users.csv"
#set the variable for the uers
$newusers = $filepath
#set Passwords for new users
$securepassword = ConvertTo-SecureString "BlahBlah" -AsPlainText -Force
foreach ($user in $newusers) {
#get user information
$User_Creation_Settings = @{
Name = "$GivenName $Surnam"
GivenName = $user.GivenName
Surname = $user.Surnam
UserPrincipalName = $user.UserPrincipalName
SamAccountName = $user.SamAccountName
Path = $user.Path
ScriptPath = $user.ScriptPath
ChangePasswordAtLogon = $false
Department = $user.Department
DisplayName = $user.DisplayName
Description = $user.Description
Title = $user.'Job Title'
AccountPassword = $securepassword
Enabled = $true
}
New-ADUser @User_Creation_Settings
#Get Groups information
$group1 = $user.Group1
$group2 = $user.Group2
$group3 = $user.Group3
$group4 = $user.Group4
#Add the users in to Groups
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group1
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group2
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group3
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group4
Write-Host "`n"
Write-Host "The account for $GivenName $Surnam created in $OuPath successfully "
}
pause
所以我已经弄明白了,我正在发布解决方案
为了解决我所描述的问题,我必须让 Powershell 认为 "First name" 和 "Last Name" 是一个完整的变量,在中间分开,这就是我的原因如果你在括号前使用了“$”符号,Power Shell 会认为你正在使用循环中的 $user,并且会 "Popup" 来自 CSV 文件的 headers .
这是整个脚本
cls
#get the csv file
$filepath = import-csv "C:\users.csv"
#set the variable for the uers
$newusers = $filepath
#set Passwords for new users
$securepassword = "BlahBlah"
foreach ($user in $newusers) {
#get user information
$User_Creation_Settings = @{
Name = "$($user.'First Name') $($user.Lastname)"
GivenName = $user.'First Name'
Surname = $user.Lastname
UserPrincipalName = $user.UserPrincipalName
SamAccountName = $user.SamAccountName
Path = $user.Path
ScriptPath = $user.ScriptPath
ChangePasswordAtLogon = $false
Department = $user.Department
DisplayName = $user.DisplayName
Description = $user.Description
Title = $user.'Job Title'
AccountPassword = ConvertTo-SecureString $securepassword -AsPlainText -Force
Enabled = $true
}
New-ADUser @User_Creation_Settings
#Get Groups information
$group1 = $user.Group1
$group2 = $user.Group2
$group3 = $user.Group3
$group4 = $user.Group4
#Add the users in to Groups
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group1
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group2
add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group3
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group4
Write-Host "`n"
Write-Host "The account for $($user.'First Name') $($user.Lastname) created in $($user.Path) successfully "
}
pause
那么在那种情况下:"$($user.'First Name') $($user.Lastname)"
powershell 的行为就像您输入了一个完整的变量。
简短的回答是两者都很好,因为它们都是在 PowerShell 中创建哈希表的有效方法。有关详细信息,请查看 about_Splatting.
就我个人而言,我在整个字符串周围使用单引号并单独保留变量,这样 PowerShell 就不会认为我在尝试调用函数。如前所述,这不是必需的,坦率地说,这会使您的代码看起来比需要的更混乱。
注意事项:
Name = $firstname $lastname # invalid because of the space
'class' = win32_logicaldisk # invalid: PowerShell will look for the function win32_logicaldisk
GivenName = '$firstname' # because single quotes are used, PowerShell will not replace the variable; GivenName will literally be $firstname
上面的splatting都很好,颜色变化的原因在第一个哈希表中"$firstname $lastname"
是一个字符串,正如你在引号中提到的那样,编辑器代表棕色的字符串和黑色的变量.
在第二个哈希表中,您对所有键和值都使用了单引号,编辑器再次理解并表示为字符串。
两种方式都没有伤害。
好的伙计们,我已经编辑了我的用户创建脚本,现在它几乎是完美的,除了一件事我想不通
如何生成散列 table 读取“$GivenName $Surname”的变量 并创建用户的名称,因为现在它正在创建没有名称参数的用户
或者我需要在 csv 文件中为 $GivenName 和 $surname 创建 header
cls
#get the csv file
$filepath = import-csv "C:\users.csv"
#set the variable for the uers
$newusers = $filepath
#set Passwords for new users
$securepassword = ConvertTo-SecureString "BlahBlah" -AsPlainText -Force
foreach ($user in $newusers) {
#get user information
$User_Creation_Settings = @{
Name = "$GivenName $Surnam"
GivenName = $user.GivenName
Surname = $user.Surnam
UserPrincipalName = $user.UserPrincipalName
SamAccountName = $user.SamAccountName
Path = $user.Path
ScriptPath = $user.ScriptPath
ChangePasswordAtLogon = $false
Department = $user.Department
DisplayName = $user.DisplayName
Description = $user.Description
Title = $user.'Job Title'
AccountPassword = $securepassword
Enabled = $true
}
New-ADUser @User_Creation_Settings
#Get Groups information
$group1 = $user.Group1
$group2 = $user.Group2
$group3 = $user.Group3
$group4 = $user.Group4
#Add the users in to Groups
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group1
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group2
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group3
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group4
Write-Host "`n"
Write-Host "The account for $GivenName $Surnam created in $OuPath successfully "
}
pause
所以我已经弄明白了,我正在发布解决方案
为了解决我所描述的问题,我必须让 Powershell 认为 "First name" 和 "Last Name" 是一个完整的变量,在中间分开,这就是我的原因如果你在括号前使用了“$”符号,Power Shell 会认为你正在使用循环中的 $user,并且会 "Popup" 来自 CSV 文件的 headers .
这是整个脚本
cls
#get the csv file
$filepath = import-csv "C:\users.csv"
#set the variable for the uers
$newusers = $filepath
#set Passwords for new users
$securepassword = "BlahBlah"
foreach ($user in $newusers) {
#get user information
$User_Creation_Settings = @{
Name = "$($user.'First Name') $($user.Lastname)"
GivenName = $user.'First Name'
Surname = $user.Lastname
UserPrincipalName = $user.UserPrincipalName
SamAccountName = $user.SamAccountName
Path = $user.Path
ScriptPath = $user.ScriptPath
ChangePasswordAtLogon = $false
Department = $user.Department
DisplayName = $user.DisplayName
Description = $user.Description
Title = $user.'Job Title'
AccountPassword = ConvertTo-SecureString $securepassword -AsPlainText -Force
Enabled = $true
}
New-ADUser @User_Creation_Settings
#Get Groups information
$group1 = $user.Group1
$group2 = $user.Group2
$group3 = $user.Group3
$group4 = $user.Group4
#Add the users in to Groups
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group1
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group2
add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group3
Add-ADPrincipalGroupMembership -Identity $user.SamAccountName -MemberOf $user.group4
Write-Host "`n"
Write-Host "The account for $($user.'First Name') $($user.Lastname) created in $($user.Path) successfully "
}
pause
那么在那种情况下:"$($user.'First Name') $($user.Lastname)"
powershell 的行为就像您输入了一个完整的变量。
简短的回答是两者都很好,因为它们都是在 PowerShell 中创建哈希表的有效方法。有关详细信息,请查看 about_Splatting.
就我个人而言,我在整个字符串周围使用单引号并单独保留变量,这样 PowerShell 就不会认为我在尝试调用函数。如前所述,这不是必需的,坦率地说,这会使您的代码看起来比需要的更混乱。
注意事项:
Name = $firstname $lastname # invalid because of the space
'class' = win32_logicaldisk # invalid: PowerShell will look for the function win32_logicaldisk
GivenName = '$firstname' # because single quotes are used, PowerShell will not replace the variable; GivenName will literally be $firstname
上面的splatting都很好,颜色变化的原因在第一个哈希表中"$firstname $lastname"
是一个字符串,正如你在引号中提到的那样,编辑器代表棕色的字符串和黑色的变量.
在第二个哈希表中,您对所有键和值都使用了单引号,编辑器再次理解并表示为字符串。
两种方式都没有伤害。